Your browser lacks required capabilities. Please upgrade it or switch to another to continue.
Loading…
/* ---- core clock: 15-min two-boundary model ---- */
<<set $min to 420>> /* minutes-since-midnight; 420 = 07:00 */
<<set $day to 1>> /* monotonic absolute day; weekday = (day-1)%7, 0 = Mon */
<<set $dayFlags to {}>> /* once-per-calendar-day flags, cleared at midnight roll */
<<set $remu_home_eve to either(1140, 1260)>> /* Remu's konbini return time TODAY (weekdays): 1140=19:00 or 1260=21:00; re-rolled each midnight. She's gone 09:00->this. */
/* ---- core resources ---- */
<<set $money to 300000>> /* MC starting wallet — the couple's savings: week-1's monthly plan is payable-but-tight (ECONOMY_REBALANCE_SPEC §7) */
/* $networth RETIRED — net worth is now COMPUTED live via CL2.netWorth() over the CL2.ASSETS registry (cash + future stocks/property/cars/belongings − liabilities), so it can never go stale. Do NOT reintroduce a stored $networth. */
<<set $reach to 0>>
<<set $energy to 90>>
<<set $stress to 10>>
<<set $lust to 20>>
<<set $libido_max to 100>> /* MAX daily libido; raised by working out (more sex per day). Libido resets to this each morning */
<<set $libido to 100>> /* MC's daily desire to have sex; resets to $libido_max each morning (CL2.onMidnight); -20 per sex scene */
<<set $fitness to 20>> /* body conditioning (raised at the gym); higher fitness = less energy spent per climax */
/* ---- run / story state ---- */
<<set $mc_name to "">> /* LEGACY single-field name (pre-2026-07-08 saves) — superseded by $mc_first/$mc_last; CL2.mc falls back to it for old saves */
<<set $mc_first to "">> /* ★ the MC's GIVEN name (Choose Partner input / Character sheet). Blank -> canon default "Genji". Given-name-basis NPCs (Aunt Ririko) use this */
<<set $mc_last to "">> /* ★ the MC's FAMILY name. Blank -> canon default "Takiya". Bank NPCs address "<last>-kun/-san" (family-name basis); formal MUB mail = "<last> <first>-sama". REMU NEVER uses either — pet names only (Manager-san / anata), the locked law */
<<set $partner to "">> /* chosen starting partner (marriage or cohabitation) */
<<set $partnerType to "">> /* "marriage" | "cohabitation" */
<<set $started to false>>
<<set $uiReturn to "Apartment">> /* where Save/Stats/Guide return to */
/* ---- content (v0.1) ---- */
<<set $remu_aff to 0>> /* Remu affection */
<<set $remu_depravity to 40>> /* Remu depravity (content/kink gate, 0..100): starts mid-Uninhibited (married ~4yr); rises slowly, affection-gated. See DEPRAVITY_SYSTEM_SPEC.md */
<<set $remu_mood to 70>> /* Remu mood 0..100 (transient; overtime -15 / a selfish-failed scene lower it, a good scene lifts it; baseline-seeks 70 at midnight). the remu_5 hallway-BJ gate = >=50 (code-verified; the old ">=60/Happy+" phrasing was stale) */
<<set $remu_energy to 100>> /* Remu energy 0..100 (overtime -30; restores to 100 each midnight) */
<<set $remu_ot_today to false>> /* did the MC ask Remu to work overtime today? -> konbini floor extends to 21:00; reset at midnight */
<<set $remu_night_sex_poor to false>> /* remu_7: set when a woken-in-the-night scene ends SELFISH/WANTING (she didn't come) -> upset remark carries into the sleep event; cleared when the sleep event shows it */
/* ---- MARY: konbini coworker + Gakko-era affair (see memory reference_cl2_mary_canon) ---- */
<<set $mary_aff to 0>> /* Mary affection (0..100) */
<<set $mary_lore to {}>> /* discovered lore flags for her work-chats */
<<set $mary_affair to "undecided">> /* "undecided" | "ongoing" (affair continues — storage+apartment sex unlock) | "ended" (rejected — perf drops; winnable back) */
<<set $mary_perf_pen to 0>> /* work-performance PENALTY while the affair is ended (drags her staff perf); repaired back to 0 if won back */
<<set $mary_discovery to 0>> /* LIGHT discovery-risk accumulator while the affair is ongoing (soft consequences, not game-over) */
<<set $mary_sexcount to 0>> /* lifetime intimacy count (for her sex scenes) */
<<set $mary_depravity to 35>> /* Mary depravity start (experienced affair partner, not prim; tune from her lore when the sex scenes are built) */
<<set $mary_met to false>> /* set on first Konbini Mary display -> unlocks her phone thread (convs leave no other state trace) */
/* ---- KAREN (0.04 The Suzuran Intake — the MC's Suzuran sex-buddy, now a MUB trainee; affair ledger, firewalled from Remu's day-trackers) ---- */
<<set $karen_aff to 0>> /* Karen affection 0..100 (CL2_SUZURAN_CONV + the night) */
<<set $karen_lore to {}>> /* discovered lore flags for the hallway chats */
<<set $karen_met to 0>> /* day the hallway reunion completed (0 = not yet) — piece 1 */
<<set $karen1_night to 0>> /* the izakaya night is IN PROGRESS this evening (nav lock) — cleared at the morning seam / taxi decline */
<<set $karen1_done to 0>> /* day the night completed (retires piece 1's ask/fork) */
<<set $karen1_taxi to 0>> /* day she was sent home instead (decline valve; one dry callback line) */
<<set $karen1_walked to 0>> /* day he walked away at the hotel-room door (decline valve #2) */
<<set $karen1_wake to 0>> /* owed: Remu's one-shot morning-after line */
<<set $karen1_wake_done to 0>>/* latched when that line has played */
<<set $karen1_shower_on to 0>> /* the hotel post-sex schedule armed (she's showering) */
<<set $karen1_shower_start to 0>>/* game-min she started showering (Phase A -> B at +20) */
<<set $karen1_morn to 0>> /* the MORNING schedule armed (he wakes, she's in the bathroom) */
<<set $karen1_morn_start to 0>> /* game-min he woke (Phase A -> B at +30) */
<<set $karen1_morn_done to 0>> /* she's out of the bathroom (timer ran, or he joined her) */
<<set $karen4_done to 0>> /* the work-morning scene (k4) has played - the morning is spent, time to leave */
<<set $karen_office_intro to 0>> /* one-shot: the first time he stops by her Capital Adequacy desk */
<<set $karen1_repeat to 0>> /* a repeat hotel night is in flight (lets the morning seam run again) */
<<set $karen1_morn_day to 0>> /* which day the hotel morning belongs to (the morning is a WINDOW, not a latch) */
<<set $karen_morn_return to 0>> /* a hotel wake intercepted by the Weekly Report - its exit returns to the Chiyoda room */
<<set $karen_sexcount to 0>> /* lifetime intimacy count */
<<set $karen_scenes to 0>> /* scenes banked (affair ledger) */
<<set $karen_sexlevel to 1>> /* technique level in HER ledger */
<<set $karen_discovery to 0>> /* silent discovery-risk accumulator (0.06 reads it) */
<<set $karen_depravity to 45>> /* start high — an experienced former sex-buddy reconnecting (tune from lore) */
/* ---- TRAVEL / WARDS (Chiyoda opened 2026-07-07 — src/39-chiyoda.twee) ---- */
<<set $cur_ward to "nakano">> /* which ward the MC is in; set by travel() on a cross-ward trip. The map renders this ward as "Here" (free exit, no commute charge) */
<<set $train_dest to "">> /* where the boarded train is headed — picks the Train Ride exit platform */
/* ---- MUB — the corporate-quest OPENER (author spec 2026-07-07): survive a PROFITABLE konbini week ->
the following Sunday Nagi/MUB offers permanent placement (Management Trainee, lowest grade, TWO WEEKS
probation) via PC mail + a phone text -> the offer unlocks elevator floor 7 (Budget & Planning). ---- */
<<set $mub_offer_due to false>> /* armed by the first profitable Saturday settle */
<<set $mub_offer to false>> /* the offer has ARRIVED (flips the Sunday after) — unlocks 7F + both inbox items */
<<set $mub_visited_f7 to false>> /* set on first display of the Budget & Planning floor (Journal step) */
<<set $mub_rank to 0>> /* the corporate RANK (資格): 0 = probation/none, 1 = Management Trainee G1, ... (BANK_SIM_SPEC §11) */
<<set $mub_met_nagi to false>> /* first-day beat 1: Nagi received you in the EVP corner office (39-chiyoda scene) */
<<set $mub_intro_done to false>> /* the OFFICE CHAIN is complete (Nagi -> interview -> Akari -> Nene+Rino) — unlocks the Recon desk */
/* ---- ★ THE OFFICE EVENTS CHAIN (author spec 2026-07-08, engine 45-office-events.twee) ---- */
<<set $mub_report_day to 0>> /* the Monday the offer letter names (offer-day + 1; computed in CL2.office.ensure) */
<<set $mub_arrived to false>> /* latched by CLICKING Nagi before Monday noon — stops the no-show fail clock */
<<set $mub_dead to false>> /* the no-show PERMANENT fail: missed Monday noon -> the bank track never re-arms */
<<set $mub_chain to 0>> /* chain progress: 0 none · 1 reunion done (interview pending) · 2 interview passed (Akari unlocked) · 3 Akari done (bullpen unlocked) */
<<set $mub_met_nene to false>> /* introduced yourself to Nene (with $mub_met_rino -> $mub_intro_done) */
<<set $mub_met_rino to false>> /* introduced yourself to Rino */
<<set $mub_interview_score to 0>> /* the 20-question interview score (flavor + a Banking-XP bonus; the outcome is rigged) */
<<set $nagi_aff to 30>> /* office cast affection (conv engine): Nagi starts warm — there is history */
<<set $akari_aff to 10>>
<<set $nene_aff to 0>> /* Nene starts at zero — the thaw is earned */
<<set $rino_aff to 20>>
<<set $rino_invited to false>> /* Rino's apartment gate (48-minato): B-or-better on the sleep scene wins her spare key; dev mode (CL2.devUnlocked) bypasses */
/* ★ THE RINO NIGHT CHAIN (49-rino-events, 2026-07-11): party -> seduction -> sleep scene -> the key */
<<set $rino_lore to {}>> /* conv lore flags (party/office convs) */
<<set $rino_depravity to 35>> /* her §11 ladder: Mentor/After Hours/Last Train Missed(gateTalk)/Stays Over/Source-First(gate)/Unwritten Rules */
<<set $rino_sexcount to 0>> /* lifetime (affair ledger — never the wife's day trackers) */
<<set $rino_scenes to 0>>
<<set $rino_sexlevel to 45>> /* her battle stat (herLevelFactor ×1.45) — creeps with scenes */
<<set $rino_discovery to 0>> /* the affair-discovery accumulator (aftermathPayoff += discoveryStep) */
<<set $rino_evt to 0>> /* 0 = never · 1 = scene 1 done (the bedroom door) · 2 = the sleep scene done */
<<set $rino_party_day to 0>> /* day the party last fired (weekly re-offer until the key; Remu/office morning-after reads) */
<<set $rino_party_yday to 0>> /* derived in onMidnight: "the party was last night" (condOK can't compare vars) */
<<set $rino_party_gate to 0>> /* computed on MUB Rino Chat entry: g4 cert + rank>=1 + 17:00-18:00 + no key + weekly window */
<<set $rino_party_declined to false>> /* he tucked her in and walked — flavors her office one-shot */
<<set $rino_sleep_result to "">> /* 'b' | 'c' — banked by the sleep scene's aftermathPick for the exit router */
<<set $rino_result_n to 0>> /* numeric mirror (0 none · 1 = C · 2 = B+) — condOK can't compare strings */
<<set $rino_sleep_poor to false>> /* poorOutcome flag — a selfish replay leaves a mark */
/* ---- ★ THE RINO OFFICE TIER (author rulings 2026-07-12: affair + 係員 unlock lunch/desk routes) ---- */
<<set $rino_lunch_gate to 0>>
<<set $rino_lunch_tired to 0>> /* latched at lunch entry from pre-meal energy; gates the table escalation (a wiped MC eats but she declines the rest) */ /* computed on MUB Rino Chat entry: lunch ask live 11:00-12:45, once/day */
<<set $rino_desk_gate to 0>> /* computed same place: depravity >= 51, am/pm slots (max 2/day) */
<<set $rino_storage_poor to false>> /* poorOutcome flag — scene 4 selfish replays cost */
<<set $react_rino_lunch to false>> /* one-shot: the day after his first lunch-route scene */
<<set $react_rino_storage to false>> /* one-shot: the day after his first storage scene */
<<set $react_rino_office to false>> /* one-shot: the day after his first evening-office scene (5) */
<<set $rino6_gate to 0>> /* scene 6 gold-button gate, recomputed on Evening Chat entry */
<<set $rino_office_night_poor to false>> /* scene 6 poorOutcome flag */
<<set $react_rino_night to false>> /* one-shot: the day after his first harassment-night scene (6) */
<<set $rino7_gate to 0>> /* scene 7 (the study date) gold-button gate, recomputed on Evening Chat entry */
<<set $rino_cert_stage to 0>> /* 0 none/G3 .. 3 CFA — computed on Rino Study Talk entry from $bk_certs; gates her opener */
<<set $rino_study_poor to false>> /* scene 7 poorOutcome flag */
<<set $react_rino_study to false>> /* one-shot: the day after the confession/study night (7) */
<<set $fin_nw_hist to []>> /* 家計簿: net worth stamped every Saturday (cap 12) — the Finance app's history bars */
<<set $rino_eve_gate to 0>> /* scene 5: computed on MUB Rino Evening Chat entry (evening tier, once/day) */
<<set $react_rino_eve1 to false>> /* eve conv one-shot: the first evening he finds her still there */
<<set $react_rino_eve2 to false>> /* eve conv one-shot: the affair-hour open (rino_evt >= 2) */
<<set $rino_office_poor to false>> /* scene 5 poorOutcome flag */
<<set $react_rino_after to false>> /* her office morning-after one-shot fired */
<<set $react_rino_party_remu to false>>/* Remu's innocent morning-after one-shot fired */
<<set $bank_sessions to 0>> /* lifetime Recon work sessions */
<<set $bank_grades to []>> /* the career ledger: {d, g} per session, cap 20 */
<<set $bank_day to 0>> /* one pack per day */
<<set $ot to null>> /* the overtime-grind session {xp,works,drinks,vid,line,...}; null = idle. Effects fire on CLICK only (refresh-safe) */
<<set $mub_last_salary to 0>> /* last Saturday's MUB pay (rank ladder CL2.RANK_PAY; paid in onMidnight, store-independent) */
/* ★ MUB ATTENDANCE (author 2026-07-11): 1 excused day-off/week (auto-absorbed) + lifetime absence strikes — 3 = Nagi's warning text, the 4th = FIRED (mub_dead). Arms at rank >= 1. */
<<set $mub_att_day to 0>> /* last day the MC was seen inside the tower (latched by the ward-tag hook) */
<<set $mub_dayoff_day to 0>> /* the day this week's day-off absorbed a miss (0 = still available; resets Monday) */
<<set $mub_absences to 0>> /* lifetime unexcused absences (author ruling: never heal) */
<<set $mub_hired_day to 0>> /* attendance baseline — judged days start AFTER this */
<<set $mub_leave to 10>> /* 有給 paid-leave balance (days); +1 per settled month, cap 20 */
<<set $mub_leave_day to 0>> /* the approved leave day (0 = none scheduled) */
<<set $mub_loan to 0>> /* 社内貸付 staff-loan outstanding (incl. the 2% flat fee) */
<<set $mub_last_loan_rep to 0>> /* this Saturday's loan deduction — the settlement paper reads it (stamp 0 weekly, never stale) */
<<set $mub_mail_read to {}>> /* the work-mail read ledger (CL2_MUB_MAIL — static ids only, the brief is day-scoped) */
<<set $mub_briefed_day to 0>> /* the day whose 部内回覧 morning brief was read → +1 Recon hint that day */
<<set $mub_fired to false>> /* dismissed for absences (distinct from the no-show death; picks Nagi's firing text) */
<<set $react_mub_fired to false>>
<<set $mub_merit to 0>> /* 考課 merit points (quality closes: S=3 A=2 B=1) toward the next rung — consumed by THE LADDER (resets to 0 on each promotion) */
/* ---- ★ THE LADDER — promotion machinery ranks 2-6 (MUB_PROMOTION_SPEC.md, "go" 2026-07-12) ---- */
<<set $mub_exam_pass to 0>> /* the target rank a passed 昇格試験 promotion exam certifies (0 = none; cleared on promotion) */
<<set $mub_exam_fail_win to 0>> /* the window day a failed exam was aiming at — blocks the retake until that window passes */
<<set $mub_sponsor_rino to false>> /* Rino signed the 引き sponsor recommendation (→5 課長) */
<<set $mub_sponsor_akari to false>> /* Akari signed the division sign-off (→6 次長) */
<<set $mub_promo_day to 0>> /* day of the last promotion (flavor + judge bookkeeping) */
<<set $react_mub_r2 to false>> /* one-shot rung reactions (the reactivity law): Akari's letter huddle */
<<set $react_mub_r3 to false>> /* Akari — the commentary with his name on it */
<<set $react_mub_r5 to false>> /* Akari — what managers lose */
<<set $react_mub_r6 to false>> /* Akari — she signed for this */
<<set $react_nagi_r3 to false>> /* Nagi — "主任 already." */
<<set $react_nagi_r6 to false>> /* Nagi — the cold reassessment */
<<set $react_rino_r4 to false>> /* Rino — he outranks the hint arrangement */
<<set $react_nene_r4 to false>> /* Nene — her packs cross his desk now */
/* ---- ★ NPC-REACTIVITY one-shot flags (the law 2026-07-10: every new event -> related NPCs react once, then it becomes a topic) ---- */
<<set $react_bank_remu to false>> /* Remu's "how was your first day?!" evening beat fired */
<<set $react_bank_wake to false>> /* Remu's first banker-morning wake beat fired */
<<set $know_sync to {}>> /* ★ the knowledge engine's overnight store: $know_sync['npc.var'] = what a sync:'overnight' CAST npc learned at the last midnight (the generalized "he comes home wearing the new grade" channel — KNOWLEDGE_MODEL_SPEC §8) */
<<set $know_ack to {}>>
<<set $girl_stats to {}>> /* ★ the girls-page lifetime intimacy ledger: $girl_stats[girl] = { times, her, mine, creampie, facial, mouth, body, oral, score_sum, score_n } — written by the sex engine (cumFx + aftermathPayoff); all reads ||0-guarded (old saves start blank and accrue from now) */ /* ★ the acquisition-reaction ledger: $know_ack['npc.fact'] = day the npc's one-shot reaction SHOWED (the conv engine's data.reactions layer; superseded news dies unspoken) */
<<set $react_bank_mary to false>> /* Mary's bank-lanyard reaction fired */
<<set $mub_probation_start to 0>> /* day of the FIRST probation pack — the 14-day clock */
<<set $mub_probation_passes to 0>> /* Recons cleared at C+ during probation (3 = confirmed MT) */
<<set $mub_lapsed to false>> /* the offer lapsed once (re-arms via the next profitable settle — ruling 8) */
<<set $skill_banking to 0>> /* RETIRED 2026-07-07 (save-compat only) — the Banking tree below owns all bank XP/levers now */
<<set $remu_mub to 0>> /* flips to 1 the day Remu joins MUB (Capital Adequacy — future arc; gates the evolved breakfast lines) */
/* ---- THE BANKING TREE (BANKING_SKILL_SPEC.md LOCKED 2026-07-07 — CL2.bankSkill, src/43-bank-skill) ---- */
<<set $bk_level to 1>> /* Banking Level (unlimited; the Technique twin's 1.2^L curve) */
<<set $bk_xp to 0>> /* XP banked toward the next level */
<<set $bk_points to 0>> /* unspent skill points — NONE at game start (author ruling 2026-07-07); points come from leveling */
<<set $bk_analysis to 0>> /* Rino's hint quota (= rank, cap 4) */
<<set $bk_modeling to 0>> /* the estimate-band width (fog 14→2%, stepped unlocks) */
<<set $bk_presence to 0>> /* conviction tokens (2 + rank) — spot-checks/duels/exam panels */
<<set $bk_politics to 0>> /* the faction-heat shield (0.5×rank; sight r1/r3/r5; cap 6) */
<<set $bk_discipline to 0>> /* bank-work cost factor (cap 6; r2 D-stress waiver; r5 overtime) */
<<set $bk_certs to []>> /* earned: g4/g3/g2/cfa1 — raise the rank caps (2/4/6/∞) + the §11.2 career gates */
<<set $bk_study to 0>> /* study points toward the NEXT cert (the train drill + S/A closes) */
<<set $bk_drill_day to 0>> /* one 銀検 drill per day (the commute) */
<<set $bk_respec_used to false>> /* the first 再研修 is free; after that ¥100,000 */
<<set $bk_heat to {mitsuba:0, naniwa:0}>> /* faction heat from sensitive corrections ($bk_ot/$bk_spot spawn lazily) */
/* ---- THE MARKETS (CL2.mkt, src/44-markets — 2026-07-07): investing layer, PC + phone ---- */
<<set $mkt_seed to random(1, 999999999)>> /* the playthrough's price-universe seed — every price is a pure fn of (seed, symbol, day); NO per-day history is ever saved */
<<set $inv to {p:{}, r:0}>> /* the portfolio: p[sym]={q,c} qty+total cost ¥ · r = realized P/L ¥ */
/* ---- THE PHONE (PHONE_SPEC.md v1.1 — CL2.phone, src/37-phone.twee) ---- */
<<set $phone_log to {}>> /* delivered ids / day-keys / #pending her-replies / #q pending questions */
<<set $phone_hist to {}>> /* per-thread bubble history, cap 20 (bounded state) */
<<set $phone_unread to { remu: 0, ririko: 0, mary: 0, mub: 0 }>>
<<set $phone_seen to { day: 0, min: 0 }>> /* last dueness-check clock (crossing semantics for block time) */
<<set $phone_aff_today to {}>><<set $phone_day to 0>> /* day-scoped texting-aff cap (+2/day/girl) */
<<set $phone_wall to "w1">><<set $phone_mode to "auto">><<set $phone_muted to false>>
<<set $ph_yday to { sessions: 0, her: 0, mc: 0 }>> /* yesterday's intimacy snapshot (latched in onMidnight) */
<<set $phone_shots to []>> /* selfies taken {g, i, d} — capped at 24 (oldest shift off) */
<<set $selfie_day to 0>> /* legacy: day of the last selfie of ANY set — still stamped, no longer a gate */
<<set $selfie_days to {}>> /* ★ the live cap (2026-07-29): {'girl:place': day} — ONE selfie per SET per day (CL2.selfieShotToday) */
<<set $selfie_used to {}>> /* the no-repeat ledger: {'girl:place':[idx…]} — a taken picture never comes up as a NEW selfie again */
<<set $skill_sex to 10>> /* RETIRED — the old flat 0..100 sex skill. Superseded by the Technique RPG tree below (RPG_SEX_SKILL_SPEC.md). Kept defined for save-compat; the engine no longer reads it. */
/* ★ TECHNIQUE — the RPG sex-skill tree (CL2.sexSkill / RPG_SEX_SKILL_SPEC.md). Unlimited level; XP by the cum-count outcome; 1 point per level into 5 skills. */
<<set $sex_level to 1>> /* Technique Level (unlimited) */
<<set $sex_xp to 0>> /* Technique XP banked toward the next level (xpToNext = round(100 * 1.2^(L-1))) */
<<set $sex_points to 0>> /* unspent skill points — NONE at game start (author ruling 2026-07-07); points come from leveling */
<<set $sk_foreplay to 0>> /* skill: foreplay -> her climax builds faster in make-out/grope/finger (uncapped) */
<<set $sk_pen to 0>> /* skill: penetration -> her climax builds faster while penetrated (uncapped) */
<<set $sk_dirty to 0>> /* skill: dirty talk -> talk raises her faster + more build-talks before they diminish (uncapped) */
<<set $sk_edging to 0>> /* skill: Endurance·Edging -> more holds at your peak (edge quota = edging rank, cap 8 (rank 0 = no edging; retuned 2026-07-07)) */
<<set $sk_stamina to 0>> /* skill: Endurance·Stamina -> your climax bar fills slower; longer rounds (cap 6) */
<<set $sx_unforgettable to 0>> /* battle record: lifetime Unforgettable scenes (Sex Technique sheet) */
<<set $sx_best_grade to "">> /* battle record: best scene grade S/A/B/C/D */
<<set $scene_log to {}>> /* ★ JOURNAL: lifetime per-scene first-completion log — sceneId -> {day, tier}; banked in aftermathPayoff (QUEST_JOURNAL_SPEC.md) */
<<set $sx_multi to 0>> /* JOURNAL: lifetime count of scenes where she finished 2+ times */
<<set $tut_plan_saved to false>> /* JOURNAL tutorial: the player saved a konbini weekly plan themselves */
<<set $store_best_profit to 0>> /* JOURNAL: best single-week store profit ever (ratchet, set at settle) */
<<set $remu_sexlevel to 40>> /* Remu's sex-scene LEVEL (0..100): multiplies how fast SHE fills YOUR climax — higher = harder to outlast. Baseline 40 + slow creep to ~70. (Her "resistance" stays 0 -> shipped balance unchanged.) */
<<set $day_sex_sessions to 0>><<set $day_her_cums to 0>><<set $day_mc_cums to 0>> /* daily intimacy tracker — reset each midnight (CL2.onMidnight); shown in the end-of-day sleep recap */
<<set $skill_mgmt to 5>> /* MC Management skill (Profession-general, 0..100): MAIN driver of konbini optimization; reused for the bank later. Rises by running the store (profitable weeks) + floor work. */
<<set $skill_retail to 5>> /* MC Konbini Retail skill (Profession, konbini-only, 0..100): boosts the store when MC works the floor; needed (with Management) to max optimization. Rises by manual floor work. */
<<set $food_tier to 3>> /* food lifestyle tier 0..9; 3 = Normal baseline */
/* ---- WEEKLY PLAN / LIFESTYLE DASHBOARD (ALL recurring weekly spending — set in the PC's "Plan the Week" app) ---- */
/* 4 tiered sliders ($food_tier above + the 3 below) + 2 fixed lines (rent, transport). Vices DEFERRED; Children conditional (when kids exist). "Budget owns the stats, venues own the content." */
<<set $style_tier to 0>> /* 👔 Style & Grooming tier 0..4 -> $polish (appearance/grooming) */
<<set $wellness_tier to 0>> /* 🧖 Health & Wellness tier 0..3 -> fitness floor + weekly stress relief */
<<set $leisure_tier to 0>> /* 🍸 Leisure & Social tier 0..4 -> $charm + weekly stress relief */
<<set $rent_amount to 150000>> /* 🏠 Housing: MONTHLY rent, real Nakano 2LDK (spec §5); fixed line (later: set by apartment tier) */
<<set $transport_cost to 9000>> /* 🚗 Transport: MONTHLY commuter pass, real Nakano–Otemachi (spec §5); MUB reimburses it once rank>=1 (通勤手当 — 47-finance) */
<<set $polish to 0>> /* appearance attraction — set by Style tier (future: dating/dialogue variants) */
<<set $charm to 0>> /* social attraction — set by Leisure tier (future) */
<<set $prestige to 0>> /* standing attraction — set by Style/lavish-food flex (future: bank rank feeds it) */
<<set $rent_paid_total to 0>> /* lifetime rent paid (¥) */
<<set $plan_week_paid to false>> /* this week's full plan (food + rent + transport + lifestyle) is DUE — the player commits it at the PC laptop, which DEDUCTS the cost from $money; resets every Saturday. Starts FALSE so week 1 is a real payable choice (the eviction fuse is a 2-strike rail, so a first-week miss only warns — no instant game-over). */
/* ---- NEGLECT -> GAME OVER (2 strikes/1 warning each rail; cleared by tending the duty) ---- */
<<set $plan_miss_streak to 0>> /* consecutive Saturdays the Weekly Plan was left unpaid -> EVICTION at 2 */
<<set $store_neglect_streak to 0>> /* consecutive Saturdays the Konbini plan was never set -> LOSE THE STORE at 2 */
<<set $rent_arrears to 0>> /* unpaid rent piling up (¥); COLLECTED with the next paid plan (spec §7 — debt, not a free waiver) */
<<set $plan_neglect_notice to false>> /* surface a Landlord Notice on the next Weekly Report */
<<set $store_neglect_notice to false>> /* surface a worried-Ririko notice on the next Weekly Report */
<<set $gameover_reason to "">> /* "" | "evicted" | "lost_store" -> routes to the Game Over screen */
/* ---- KONBINI JOB: MC = Store Manager (runs the weekly P&L); Remu = Assistant Manager (always on the floor, replacing Aunt Ririko's floor role); schedulable staff = Mary/Ami/Asano/Hina. See CL2 engine konbini block. ---- */
<<set $konbini_rank to "store_manager">> /* "store_manager" runs the terminal + weekly P&L. (employee/assistant_manager kept for future arcs) */
<<set $konbini_closed to false>> /* shuttered after 3 losing weeks; reopen via Aunt Ririko */
<<set $konbini_shifts_today to 0>> /* floor shifts pulled today; cap 2; reset every midnight */
<<set $konbini_shifts_worked to 0>> /* lifetime floor shifts (promotion meter, kept for a future employee arc) */
/* weekly plan the manager sets at the terminal */
<<set $store_cash to 1500000>> /* the store's OWN purse (starter float ≈ one month of wages+overhead, spec §7); += monthly profit. Separate from $money (MC wallet) */
<<set $store_week_bonus to 0>> /* floor-help sales accrued this week (CL2.konbiniHelp) -> added to sc_revenue + the weekly profit; reset each settle */
<<set $store_week to 1>> /* operating-week counter */
<<set $store_plan_set to true>> /* this week's plan committed (the defaults are a valid plan) */
<<set $store_loss_streak to 0>> /* consecutive losing weeks; 3 -> store closes */
<<set $store_profit_streak to 0>> /* consecutive winning weeks; >=2 unlocks the Optimal auto-fill */
<<set $store_optimization to 0>> /* store optimization meter 0..$store_opt_cap: +2% store performance per level. Driven by Management skill (sets the target) + floor work; capped per phase, raised by future store UPGRADES. */
<<set $store_opt_cap to 10>> /* phase-1 optimization ceiling; a future store upgrade raises it (phase 2 ~25, etc.) */
<<set $store_order_fresh to 2800>> /* monthly units ordered, ×20 volume (ECONOMY_REBALANCE_SPEC §2): Fresh bento/perishables (100% waste if unsold). Tuned to ~demand so the default plan runs barely black at Normal — the week-1 squeeze */
<<set $store_order_drinks to 5000>> /* Drinks (30% waste on leftovers) */
<<set $store_order_goods to 2000>> /* Goods/sundries (20% waste on leftovers) */
<<set $store_price_fresh to "standard">> /* discount | standard | premium */
<<set $store_price_drinks to "standard">>
<<set $store_price_goods to "standard">>
<<set $store_forecast_level to "Normal">> /* next week's traffic band: Slow | Normal | Busy | Rush */
<<set $store_forecast_skew to "none">> /* next week's weather skew: none | rainy | heatwave | festival */
<<set $store_last_revenue to 0>><<set $store_last_cogs to 0>><<set $store_last_wages to 0>>
<<set $store_last_profit to 0>><<set $store_last_mcpay to 0>><<set $store_last_waste to 0>>
<<set $pending_weekly_report to false>> /* set by the Saturday settle; routes the post-sleep weekly-report card */
/* staff roster (21 slots = 7 days x 3 shifts; slot = weekday*3 + shift). Remu is the always-present anchor and is NOT in $sched.
★ ONE OWNER (spec §3, 2026-07-20): $sched is DEFINED by CL2.initKonbini's 21-shift single-cover default — the old
42-shift double-cover copy that lived here cost ¥1.46M/month at statutory wages (the ×20 store can't legally afford
it) and silently DISAGREED with the engine's fallback. A struggling store runs a skeleton crew; staffing UP is a
choice the player buys into (wages vs floor-presence — the two-currency dial). Do NOT reintroduce a $sched here. */
<<set $staff_energy to { mary:100, ami:100, asano:100, hina:100 }>> /* 0..100, ages each week by shift load */
<<set $staff_happy to { mary:60, ami:60, asano:60, hina:60 }>> /* 0..100, ages each week by shift load */
<<set $pres_mary to 0>><<set $pres_ami to 0>><<set $pres_asano to 0>><<set $pres_hina to 0>><<set $pres_remu to 0>>
<<set $konbini_chat_who to "">> /* scratch: which coworker the light chat passage is about */
/* ---- PC / desktop interface (CL2.pc macOS-style overlay) ---- */
<<set $pcTheme to "auto">> /* "auto" follows day/night ($min) · "light" · "dark" — desktop wallpaper theme (Settings app) */
<<set $cfa to 0>> /* CFA/FRM licensing study progress 0..100 (raised by the Study app) */
<<set $cfa_today to 0>> /* study points earned today (daily cap 10) */
<<set $cfa_day to 0>> /* the $day stamp $cfa_today resets against */
<<set $pc_mail_read to {}>> /* read-state per email id */<<widget "hud">><<= CL2.hudHTML()>><</widget>>
<<widget "advance">>
<<run CL2.advanceTime($args[0])>>
<</widget>><div class="cl2-title cl2-title--img">
<div class="cl2-menu">
<<button "New game">><<run CL2.vsel.go("new")>><<goto "Version Select">><</button>>
<<button "Load game">><<run CL2.vsel.go("load")>><<goto "Version Select">><</button>>
</div>
</div>
<div class="cl2-ver"><<= CL2.VERSION>></div><div class="cl2-ng">
<div class="cl2-ng-head">
<div class="cl2-ng-kicker">Chapter Zero</div>
<h1 class="cl2-ng-title">A New Life in Tokyo</h1>
<div class="cl2-ng-sub">The diploma is framed and forgotten. Rent is due in seven days, the bank wants you at a desk by nine, and someone is asleep beside you. Begin.</div>
</div>
<div class="cl2-ng-cards">
<div class="cl2-ng-card cl2-ng-card-live">
<div class="cl2-ng-card-title">Start a new life</div>
<div class="cl2-ng-card-body">Wake up married, broke, and hungry. Build the Reach — money, network, and the people who stay.</div>
<<button "Start a new life">><<goto "Choose Partner">><</button>>
</div>
<div class="cl2-ng-card cl2-ng-card-dead">
<span class="cl2-ng-wip">WIP</span>
<div class="cl2-ng-card-title">Import a save from <i>Gakko</i></div>
<div class="cl2-ng-card-body">Carry your old life forward — affections, fortunes, and consequences from the school years. Not yet wired in.</div>
<span class="cl2-ng-deadbtn">Import unavailable</span>
</div>
</div>
<div class="cl2-ng-foot">[[Back|Start]]</div>
</div><div class="cl2-cp">
<div class="cl2-cp-head">
<h1 class="cl2-cp-title">Who Did You Choose?</h1>
<div class="cl2-cp-sub">Choose who you wake up next to. The rest of the life gets built around her.</div>
</div>
<div class="cl2-cp-name">
<div class="cl2-cp-name-row">
<span class="cl2-cp-name-f"><label class="cl2-cp-name-l" for="cl2-mcfirst">First name</label>
<input id="cl2-mcfirst" type="text" maxlength="16" autocomplete="off" spellcheck="false" placeholder="e.g. Genji"></span>
<span class="cl2-cp-name-f"><label class="cl2-cp-name-l" for="cl2-mclast">Last name</label>
<input id="cl2-mclast" type="text" maxlength="16" autocomplete="off" spellcheck="false" placeholder="e.g. Takiya"></span>
</div>
<div class="cl2-cp-name-hint">The bank will know you by your last name; family, by your first. However the city knows you — she’ll still call you <i>Manager-san</i>. You can change both later on your Character sheet.</div>
</div>
<div class="cl2-cp-row">
<a class="cl2-card cl2-card-rose cl2-card-live" data-passage="Intro Wake" data-setter="$partner to 'Remu'; $partnerType to 'marriage'; $started to true">
<img class="cl2-card-img" src="img/vertical_cards/remu.jpg" alt="Remu">
<span class="cl2-pill cl2-pill-canon">canon</span>
<div class="cl2-card-band"><span class="cl2-card-name">Remu</span><span class="cl2-card-role">Your wife</span></div>
</a>
<div class="cl2-card cl2-card-rose cl2-card-lock cl2-card-pic">
<img class="cl2-card-img" src="img/vertical_cards/karen.jpg" alt="Karen">
<span class="cl2-pill cl2-pill-soon">soon</span>
<div class="cl2-card-band"><span class="cl2-card-name">Karen</span><span class="cl2-card-soon">coming soon</span></div>
</div>
<div class="cl2-card cl2-card-rose cl2-card-lock cl2-card-pic">
<img class="cl2-card-img" src="img/vertical_cards/ami.jpg" alt="Ami">
<span class="cl2-pill cl2-pill-soon">soon</span>
<div class="cl2-card-band"><span class="cl2-card-name">Ami</span><span class="cl2-card-soon">coming soon</span></div>
</div>
<div class="cl2-card cl2-card-rose cl2-card-lock">
<div class="cl2-card-sil" data-init="A"></div>
<div class="cl2-card-band"><span class="cl2-card-name">Asano</span><span class="cl2-card-soon">coming soon</span></div>
</div>
<div class="cl2-card cl2-card-rose cl2-card-lock">
<div class="cl2-card-sil" data-init="M"></div>
<div class="cl2-card-band"><span class="cl2-card-name">Minase</span><span class="cl2-card-soon">coming soon</span></div>
</div>
<div class="cl2-cp-div" aria-hidden="true"></div>
<div class="cl2-card cl2-card-steel cl2-card-lock">
<div class="cl2-card-sil" data-init="Y"></div>
<div class="cl2-card-band"><span class="cl2-card-name">Yua</span><span class="cl2-card-soon">coming soon</span></div>
</div>
<div class="cl2-card cl2-card-steel cl2-card-lock">
<div class="cl2-card-sil" data-init="S"></div>
<div class="cl2-card-band"><span class="cl2-card-name">Saeko</span><span class="cl2-card-soon">coming soon</span></div>
</div>
<div class="cl2-card cl2-card-steel cl2-card-lock">
<div class="cl2-card-sil" data-init="W"></div>
<div class="cl2-card-band"><span class="cl2-card-name">Washio</span><span class="cl2-card-soon">coming soon</span></div>
</div>
<div class="cl2-card cl2-card-steel cl2-card-lock">
<div class="cl2-card-sil" data-init="T"></div>
<div class="cl2-card-band"><span class="cl2-card-name">Tsubasa</span><span class="cl2-card-soon">coming soon</span></div>
</div>
<div class="cl2-card cl2-card-steel cl2-card-lock">
<div class="cl2-card-sil" data-init="K"></div>
<div class="cl2-card-band"><span class="cl2-card-name">Kawakita</span><span class="cl2-card-soon">coming soon</span></div>
</div>
</div>
<div class="cl2-cp-foot">Only the canon route is open in <<= CL2.VERSION>>. [[Back|New Game]]</div>
</div><<hud>>
<<set $started to true>>
<div class="intro-stage">
<img class="intro-bg" src="img/place/player_apartment/bed1.jpg" alt="">
<div class="intro-veil"></div>
<div class="intro-body">
<p class="intro-prose">Remu wakes me before the alarm, a hand on my shoulder, her weight settling on the edge of the futon. <i>"Hey. Big day. You don't get to sleep through this one."</i> The room is still grey, cheap blinds, the heater ticking, my wife propped on one elbow, waiting for my eyes to actually open. I lie there one breath longer than I should. Then I get up.</p>
<p class="intro-tag">Day one.</p>
</div>
</div>
<p class="intro-cont"><<button "Haul yourself up">><<advance 10>><<goto "Intro Morning">><</button>></p><<hud>>
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ leaveTo : "Intro Day1" })>><</timed>><<hud>>
<div class="intro-stage">
<img class="intro-bg" src="img/place/player_apartment/living.jpg" alt="">
<div class="intro-veil"></div>
<div class="intro-body">
<p class="intro-prose">The apron today, not a tie. Remu pressed it last night, the one with the store logo on the chest. On the counter there's a stock-order notice, my transit card, and the ring of keys Aunt Ririko handed me yesterday. Shutter, till, back room. She's stepping back for good. The badge says manager now, and it has my name on it. Remu opens the floor with me, same as always. Money is tight and the hours are long. I pocket the keys and reach for the door.</p>
<p class="intro-tag">Time to open up. It's our store now.</p>
</div>
</div>
<p class="intro-cont"><<button "Step out">><<advance 5>><<goto "Apartment">><</button>></p>/* Pre-sleep intimate night chat (CL2.conv). Reached from the bedroom "Sleep" action.
leave ("Turn off the light — sleep") -> Remu Sleep (the sleep video + day recap). */
<<hud>>
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_REMU_PRESLEEP_CONV, leaveTo : "Remu Sleep" })>><</timed>>/* Sleep video (settling clip -> sleeping loop) with the end-of-day recap overlaid; the wake button does the real CL2.sleep advance + routes to the morning. */
<div id="cv-host"><div class="cv cv-sleep"><video class="cv-vid" autoplay muted playsinline src="vid/build_1_remu_0/longhair_sleep.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="slp-wrap"><<= CL2.sleepRecap()>></div></div></div></div>
<<if $remu_night_sex_poor>>\
<div class="slp-upset">Remu keeps her back to you in the dark, blanket pulled to her chin, breathing hard and not reaching for you. <i>"...I hope that was worth waking me for, anata. Because I'm going to be wrecked tomorrow — and I'm going to remember exactly why."</i></div>\
<<set $remu_night_sex_poor to false>>\
<</if>>\
<div class="slp-cont"><<button "Wake — a new day">><<run CL2.sleep(420)>><<if $gameover_reason>><<goto "Game Over">><<elseif $pending_weekly_report>><<goto "Weekly Report">><<else>><<goto "Morning Wake">><</if>><</button>></div>/* remu_7 IN-BED NIGHT HUB (reached from the remu_icon_8 bed sprite, 23:00-06:00). Plays longhair_remu_sleep_night (loop).
(a) sleep beside her -> Remu Presleep (the normal bedtime chat -> sleep). (b) wake her -> Remu Night Sex,
ENABLED only 23:00-03:00 AND not-done-tonight; else the button is shown DISABLED with a note (never hidden). */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted loop playsinline src="vid/build_1_remu_0/longhair_remu_sleep_night.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"><p class="cv-narr">Past three in the morning and the flat's gone black and silent. Remu's already under the covers, turned toward your side of the bed, one strap slid off her shoulder, breathing slow and deep. She stirred when you came in — didn't wake — just reached, half-asleep, for the warmth that's meant to be there.</p></div></div></div></div>
<<nobr>>
<div class="slp-btnrow">
<<button "Slide in and sleep beside her">><<goto "Remu Bed Roll">><</button>>
<<if ($min gte 1380) or ($min lte 180)>>
<<if $dayFlags and $dayFlags.remu_night_sex>>
<button type="button" class="slp-off" disabled>Have sex with her</button>
<<else>>
<<button "Have sex with her">><<goto "Remu Night Sex">><</button>>
<</if>>
<<else>>
<button type="button" class="slp-off" disabled>Have sex with her</button>
<</if>>
</div>
<</nobr>>
<<if not (($min gte 1380) or ($min lte 180))>><div class="slp-note">It's gone 3 a.m. — she's dead asleep, and she's on the floor in a few hours. Let her rest.</div><<elseif $dayFlags and $dayFlags.remu_night_sex>><div class="slp-note">You already woke her for that tonight. Let her sleep.</div><</if>>/* remu_7 launcher (window.CL2_REMU_NIGHT_SEX, build_1_remu_7). Sleep-disturbed reluctant->warm; she can climax (creampie).
recapReturn/leaveTo = Remu Sleep (after aftermath -> longhair_sleep + the day recap; poor outcome carries $remu_night_sex_poor into it). */
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data : window.CL2_REMU_NIGHT_SEX, leaveTo : "Remu Sleep", recapReturn : "Remu Sleep" })>><</timed>>/* remu_7 night hub option (a): "Slide in and sleep beside her" -> the couple settling in together (remu_nap_2) with the
day recap overlaid, then wake to morning. (The after-SEX sleep uses longhair_sleep via Remu Sleep; this is the no-sex path.) */
<div id="cv-host"><div class="cv cv-sleep"><video class="cv-vid" autoplay muted loop playsinline src="vid/build_1_apt_act/remu_nap_2.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="slp-wrap"><<= CL2.sleepRecap()>></div></div></div></div>
<div class="slp-cont"><<button "Wake — a new day">><<run CL2.sleep(420)>><<if $gameover_reason>><<goto "Game Over">><<elseif $pending_weekly_report>><<goto "Weekly Report">><<else>><<goto "Morning Wake">><</if>><</button>></div>/* ★ the 70% BED-BLOCK (author spec 2026-07-20): "Slide in and sleep beside her" resolves HERE, once per night.
Deterministic night-seeded roll — nightId = the day the 23:00-06:00 window STARTED on (crossing midnight keeps
the same id), golden-ratio-hashed (Knuth multiplicative — consecutive nights land scattered, no streak cycles),
so re-entering the hub or reloading can never re-roll it. ~70% of nights she has the
whole futon annexed and the second bedroom is the bed tonight; ~30% there's room and the normal couple sleep runs. */
<<hud>>\
<<set _nid to ($min gte 1380) ? $day : ($day - 1)>>\
<<set _blocked to (((_nid * 2654435761) % 4294967296) / 4294967296) lt 0.7>>\
<<if _blocked>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted loop playsinline src="vid/build_1_remu_0/longhair_remu_sleep_night.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"><p class="cv-narr">You lift the blanket to claim your side of the bed. There is no your side of the bed. Remu has annexed the middle in her sleep, lying diagonal with one arm flung across both pillows. You try lifting the arm; it comes back down. You try rolling her over; she makes a low sound and holds on to the blanket. <i>"...mmn... warm..."</i> You have about a foot of mattress at the edge.</p></div></div></div></div>
<<nobr>>
<div class="slp-btnrow">
<<button "Take the futon in the second room">><<goto "Apartment Second Bedroom">><</button>>
<<button "Give up for now — back away quietly">><<goto "Apartment Main Bedroom">><</button>>
</div>
<</nobr>>
<div class="slp-note">She's not budging tonight. That leaves the futon in the spare room.</div>
<<else>>\
<<goto "Remu Night Sleep">>\
<</if>>/* ★ the second-bedroom futon night (author spec 2026-07-20). Plays build_3 mc_sleep_second_bedroom with the day
recap; waking here ALWAYS routes into the Remu Ten morning-after (she wakes to an empty half of her bed and
comes to find you) — gameover/weekly-report gates keep priority, exactly like the other sleep passages. */
<div id="cv-host"><div class="cv cv-sleep"><video class="cv-vid" autoplay muted loop playsinline src="vid/build_3_apt_act/mc_sleep_second_bedroom.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="slp-wrap"><<= CL2.sleepRecap()>></div></div></div></div>
<div class="slp-cont"><<button "Wake — a new day">><<run CL2.sleep(420)>><<if $gameover_reason>><<goto "Game Over">><<elseif $pending_weekly_report>><<set $remu10_pending to true>><<goto "Weekly Report">><<else>><<goto "Remu Ten Morning">><</if>><</button>></div>/* remu_10 morning-after conv (CL2_REMU_MORNING10_CONV, build_3_remu_10 wake clips). Fired from waking in the
SECOND bedroom: Remu comes to find you — annoyed you slept apart — explanation — laughing — the gold button
escalates via sexGo 'Remu Ten Sex'. Replaces Morning Wake on second-bedroom mornings; leave = the second bedroom. */
<<hud>>
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_REMU_MORNING10_CONV, leaveTo : "Apartment Second Bedroom" })>><</timed>>/* remu_10 launcher (window.CL2_REMU_MORNING10_SEX, build_3_remu_10, 133 clips). The morning-after magnum;
the aftermath SKIPS TO THE BATHROOM (teeth-brushing beat) so the scene exits there, not the bedroom. */
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data : window.CL2_REMU_MORNING10_SEX, leaveTo : "Apartment Bathroom", recapReturn : "Apartment Second Bedroom", skipTired : true })>><</timed>>/* Post-sleep morning — reuses the game-start morning conv (CL2_REMU_CONV). Day-gated opener:
day 1 = "first day with the keys" (data.opens); day 2+ = "another morning running our store" (data.open). Konbini-only for 0.01.
★ 0.03: the Sorento offer intercepts ONE wake (day 2+, Remu partner) — the hard-to-miss surface
piece 1 demanded; the card routes straight back here. */
<<if $ririko_offer_pending and $day gte 2 and ($partner is "Remu" or not $partner)>><<goto "Ririko Car Offer">><</if>>\
<<hud>>
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_REMU_CONV, leaveTo : "Apartment Main Bedroom" })>><</timed>>/* Relaxed evening living-room night chat — reached from the "Sit with Remu" sofa sprite (22:30–24:00).
night_talk clips; leave ("Call it a night…") -> Remu Night End. */
<<hud>>
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_REMU_EVENING_CONV, leaveTo : "Remu Night End" })>><</timed>>/* Closing beat of the evening chat: plays longhair_night_talk_end, then the two choices. */
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline src="vid/build_1_remu_0/longhair_night_talk_end.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"><p class="cv-narr">She yawns into your shoulder, warm and finished with the day. <i>"...okay. Bed. Or —"</i> a sleepy, sideways smile <i>"— not-bed, if you've still got it in you, Manager-san."</i></p></div></div></div></div>
<div class="slp-cont"><<button "Head to bed">><<goto "Remu Presleep">><</button>> <<button "Have sex first">><<goto "Remu Home Sex">><</button>></div>/* Home night sex with Remu (window.CL2_REMU_HOME_SEX, build_1_remu_4). FULL arc from the living-room sofa (Phase 1 -> floor -> bed).
Reached from the evening living-room "Have sex first". Once/day cooldown -> recap; exits to Remu Presleep. */
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data : window.CL2_REMU_HOME_SEX, leaveTo : "Remu Presleep", recapReturn : "Remu Presleep" })>><</timed>>/* Home night sex with Remu — STRAIGHT to the bedroom (Phase 5 penetrate). Reached from "Have sex first" after dinner + the pre-sleep chat. Exits to Remu Presleep. */
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data : window.CL2_REMU_HOME_SEX, leaveTo : "Remu Presleep", recapReturn : "Remu Presleep", startAt : "p5_penetrate" })>><</timed>>/* Kitchen dinner scene — reached from the "Join Remu in the kitchen" stove sprite (21:30–22:30).
Eating restores the body (CL2.eatMeal, once/day). start_1 -> start_2 -> dinner chat -> end (go to bed / have sex first). */
<<hud>>
<<set _meal to CL2.eatMeal('dinner')>><<if _meal>><<run CL2.toast("Dinner with Remu", "A late meal together — energy +" + _meal.energy + ", stress -" + _meal.stress + ", lust +" + _meal.lust + ".")>><</if>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline src="vid/build_1_remu_0/longhair_dinner_start_1.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"><p class="cv-narr">You drift into the kitchen and there she is at the stove — oversized shirt, bare feet, the pan going, the rice cooker breathing steam. She doesn't turn around; she doesn't have to. <i>"You're just in time to be useless and handsome,"</i> she says. <i>"My favourite kind of help."</i></p></div></div></div></div>
<div class="slp-cont"><<button "Come up behind her">><<goto "Remu Dinner 2">><</button>></div><<hud>>
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline src="vid/build_1_remu_0/longhair_dinner_start_2.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"><p class="cv-narr">She tips her head back against your shoulder for a moment, the spatula still going, and lets out a long breath like she's been holding the whole day inside it. <i>"...okay. Five minutes and it's done. Stay and talk to me till then — tell me something that isn't about the store."</i></p></div></div></div></div>
<div class="slp-cont"><<button "Stay and talk">><<goto "Remu Dinner Chat">><</button>></div><<hud>>
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_REMU_DINNER_CONV, leaveTo : "Remu Dinner End" })>><</timed>>/* Closing beat of the dinner scene: plays longhair_dinner_end, then go-to-bed / have-sex-first. */
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline src="vid/build_1_remu_0/longhair_dinner_end.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"><p class="cv-narr">Plates cleared, the kitchen quiet, the day finally done. She leans into your side, warm and fed. <i>"...that's better. Okay, anata —"</i> a slow look up at you <i>"— bed? Or are you going to make tonight interesting first?"</i></p></div></div></div></div>
<div class="slp-cont"><<button "Head to bed">><<goto "Remu Presleep">><</button>> <<button "Have sex first">><<goto "Remu Home Sex Bed">><</button>> <<button "Just hang out a while">><<goto "Apartment Kitchen">><</button>></div>/* Terminal fail screen. $gameover_reason = 'evicted' (neglected the Weekly Plan / rent) | 'lost_store' (neglected the Konbini plan).
Reached via the sleep wake route + the global :passagestart guard. Escape = Load a save / Start over (both replace state). */
<<nobr>>
<div class="cl2-gameover">
<div class="cl2-go-card">
<<if $gameover_reason is "lost_store">>
<div class="cl2-go-icon">🏪</div>
<div class="cl2-go-title">YOU LOST THE STORE</div>
<div class="cl2-go-body">Two weeks running you didn't so much as set the plan. Aunt Ririko closed the ledger, slid the keys off the counter, and didn't quite meet your eye. <i>“The terminal has been empty since I gave you the keys, dear. I have to hand the store to someone who will set the plan.”</i> Without the store there is no income — and without income, everything else comes apart fast.</div>
<<else>>
<div class="cl2-go-icon">🏚</div>
<div class="cl2-go-title">EVICTED</div>
<div class="cl2-go-body">The rent went unpaid one week too many, and the final notice was exactly that — final. Your key no longer turns. Your things are stacked in the hall, and Remu is very quiet beside you on the landing. There is nowhere to be tonight, and no plan that fixes it now.</div>
<</if>>
<div class="cl2-go-sub">Tend to the week — the plan on the home computer, and the plan at the store. Both. Every week.</div>
<div class="cl2-go-btns">
<<button "Load a save">><<run CL2.saveMenu('load')>><</button>>
<<button "Start over">><<run CL2.confirmRestart()>><</button>>
</div>
</div>
</div>
<</nobr>><<hud>>\
<<if $plan_week_paid>>\
<<goto "Apartment Lobby">>\
<<else>>\
<<set _L to window.CL2_PC_LIFESTYLE>>\
<<set _tc to (($mub_rank gte 1) and (not $mub_dead)) ? 0 : ($transport_cost || 9000)>>\
<<set _lean to ($rent_amount || 150000) + _tc + ($rent_arrears || 0) + _L.food.costs[0]>>\
<<set _broke to _lean gt ($money || 0)>>\
<<set _at to (CL2.remuNow ? CL2.remuNow().at : "home")>>\
<<set _here to _at is "home">>\
<<set _first to not $plan_door_seen>>\
<<set _again to ($dayFlags and $dayFlags.plan_door_day) ? true : false>>\
<<set _note to (not _here) and (not _broke) and (not _again)>>\
<div class="pdoor-stage">
<img class="pdoor-bg" src="img/place/player_apartment/hallway.jpg" alt="">
<div class="pdoor-veil"></div>
<<if _broke>>\
/* the valve does NOT spend the first-visit latch (review catch 2026-07-20): a broke first brush with the
door still owes the player the full day-one beat on their first SOLVENT visit. */
<div @class="'pdoor-card' + (_here ? '' : ' pdoor-card--note')">
<div class="pdoor-eyebrow">月々の家計 · The month, unpaid</div>
<div class="pdoor-head">The math doesn't reach.</div>
<div class="pdoor-prose">I count the wallet twice and the math lands the same way both times — the month costs more than I'm holding, even stripped down to rent and rice. <<if _here>>Remu appears in the doorway, and I watch her do the same arithmetic off my face. <i>"…I did the numbers too, anata."</i> A breath. Then her chin comes up. <i>"Go. Make it. And the day it fits in that wallet, we pay the month before you so much as touch this door. Deal?"</i><<else>>Remu's note is on the landlord's envelope, her handwriting small and steady: <i>"I did the math too. Go make it — then straight to the laptop. Promise me. — R"</i><</if>></div>
<div class="pdoor-chips"><span class="pdoor-chip pdoor-chip--warn">short of the lean month · ¥<<= _lean.toLocaleString()>></span></div>
<div class="pdoor-btns">
<button type="button" class="pdoor-btn pdoor-btn--hero" data-pdoor-go="Apartment Lobby">Head out — go make the money</button>
<button type="button" class="pdoor-btn" data-pdoor-go="Apartment">Back inside</button>
</div>
</div>
<<else>>\
<<set $plan_door_seen to true>>\
<<if $dayFlags>><<set $dayFlags.plan_door_day to true>><</if>>\
<div @class="'pdoor-card' + (_note ? ' pdoor-card--note' : '')">
<div class="pdoor-eyebrow">月々の家計 · The month, unpaid</div>
<<if _again>>\
<div class="pdoor-head">Still unpaid.</div>
<div class="pdoor-prose">Nothing about the doorway has changed — the month is still unpaid, and it is still, quietly, between me and the street.</div>
<<elseif _first>>\
<div class="pdoor-head"><<if _here>>She's not moving.<<else>>The envelope found you first.<</if>></div>
<div class="pdoor-prose"><<if _here>>The keys are in my hand and the door is right there — and so, suddenly, is Remu, planted between me and the door like a very small, very calm wall. She tips her head toward the bedroom, where the laptop sits with the landlord's envelope squared on top of it. <i>"Anata. That envelope has been waiting long enough. Rent, food, the train card — the whole month, one sitting. Do it with me before the day gets you, or I'll start believing you think meals happen by magic."</i><<else>>The landlord's envelope is taped to the door at exactly eye height — Remu's work, the tape ruler-straight. Across the front, her handwriting: <i>"The month first. Rent, food, the train card — it's all on the laptop. I mean it. — R ♥"</i><</if>></div>
<div class="pdoor-warn">The month isn't paid. The landlord is still waiting, and nothing has been entered on the laptop.</div>
<<elseif _here>>\
<<set _i to CL2.pickIdx('plan_door_home', 4)>>\
/* location-soft home lines (review catch 2026-07-20): the 'home' fork fires for every home band —
morning kitchen, afternoon sofa, evening — so no line may pin her to one room. */
<div class="pdoor-head">She's not moving.</div>
<div class="pdoor-prose"><<if _i is 0>>Remu doesn't even look up from what she's doing. <i>"The envelope's on the laptop again, anata. Two minutes. Then the day can have you."</i><<elseif _i is 1>>Remu, from across the room, in the voice she uses for stock that's shelved itself wrong: <i>"Door. Laptop. You have the order reversed."</i><<elseif _i is 2>>She holds out a hand as I pass, palm up, like a toll booth. <i>"You know the deal, Manager-san — the month first. I'll even watch you press the button."</i><<else>>Remu leans into view with one eyebrow already raised. <i>"Mou — every single week you try the door first. The laptop is four steps behind you. I counted."</i><</if>></div>
<<else>>\
<div class="pdoor-head">The envelope found you first.</div>
<<if _at is "bed">>\
<div class="pdoor-prose">The flat is dark and asleep — but the landlord's envelope is propped against the door handle where there's no missing it, Remu's handwriting across the front: <i>"If you're sneaking out at this hour, pay the month first. Then sneak. ♥"</i></div>
<<else>>\
<<set _i to CL2.pickIdx('plan_door_away', 3)>>\
<div class="pdoor-prose"><<if _i is 0>>The landlord's envelope is taped to the door again, dead level. Remu's handwriting: <i>"Saturday is coming whether we pay it or not. Laptop. — R"</i><<elseif _i is 1>>My hand is on the latch when the phone buzzes. Remu: <i>"I counted the envelopes on the laptop before I left. If that number hasn't changed by tonight, we are having a conversation."</i> The door suddenly feels very watched.<<else>>Her note hangs off the coat hook, exactly where my jacket should be: <i>"Jacket's hostage. The month first. Love you. — R"</i> The jacket is, in fact, gone.<</if>></div>
<</if>>\
<</if>>\
<div class="pdoor-chips"><span class="pdoor-chip">月次決算 · settles Saturday 00:00</span></div>
<div class="pdoor-btns">
<button type="button" class="pdoor-btn pdoor-btn--hero" data-pdoor-act="laptop">Open the laptop — do the month</button>
<button type="button" class="pdoor-btn" data-pdoor-go="Apartment Leave">Out to the lobby</button>
<button type="button" class="pdoor-btn" data-pdoor-go="Apartment">Back inside</button>
</div>
</div>
<</if>>\
</div>
<</if>><<hud>>\
<<set _first to not $tut_plan_saved>>\
<<set _rat to (CL2.remuNow ? CL2.remuNow().at : "store")>>\
<<set _note to _first and (_rat isnot "store")>>\
<div class="pdoor-stage">
<img class="pdoor-bg" src="img/place/konbini/konbini_counter.jpg" alt="The konbini counter">
<div class="pdoor-veil"></div>
<div @class="'pdoor-card' + (_note ? ' pdoor-card--note' : '')">
<div class="pdoor-eyebrow">Ririko Mart · 月次計画 the month's plan</div>
<div class="pdoor-head">The floor waits on a signature.</div>
<<if _first>>\
/* presence fork (review catch 2026-07-20): the day-1 path reaches this beat while Remu is provably at
home making breakfast — she only stages the intercept when the engine actually has her on the floor. */
<div class="pdoor-prose"><<if _rat is "store">>Remu intercepts me two steps past the door chime, lifts the clipboard out of my hands, and steers me by both shoulders toward the office. <i>"Manager-san. Before you touch a single shelf — the terminal. Ririko left her whole month sitting in it: orders, prices, the roster. Look it over, press Save, and the store will start believing you're actually the manager."</i> She leans in, mock-solemn. <i>"I'll mind the floor. Go make it yours."</i><<else>>The door chime dies and the store waits — shelves stocked, register sleeping, and on the office door a docket in Aunt Ririko's backhand slant, taped dead level: <i>"The month is in the terminal, dear. Orders, prices, the roster — my numbers, until you make them yours. Look them over and press Save before the doors open. — R."</i><</if>></div>
<div class="pdoor-warn">The month's plan needs a manager's signature before the floor runs.</div>
<<else>>\
<<set _i to CL2.pickIdx('kplan_stop', 3)>>\
<div class="pdoor-prose"><<if _i is 0>>The office door is propped open and the terminal is already awake — Saturday wiped the month, and the POS wants its orders before the floor gets a single decision out of me.<<elseif _i is 1>>New month on the books. The plan on the terminal is empty, the cursor blinking in the first field.<<else>>Post-settle air on the floor: polish, cold bento, and an unset plan. The register queue can survive ten minutes of management.<</if>></div>
<</if>>\
<div class="pdoor-chips"><span class="pdoor-chip">Save it yourself — or one press of Ririko's playbook</span></div>
<div class="pdoor-btns">
<button type="button" class="pdoor-btn pdoor-btn--hero" data-pdoor-go="Konbini Management">Sit down at the terminal</button>
<button type="button" class="pdoor-btn" data-pdoor-go="Residential District">Back out to the street</button>
</div>
</div>
</div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-scene">
<img @src="'img/place/' + (_night ? 'bank_lobby_n.jpg' : 'bank_lobby.jpg')" alt="The bank">
<div class="loc-scrim"></div>
<div class="loc-name">Marunouchi Tower · Day One</div>
</div>
The lobby is all cold marble and colder air-conditioning, and a security gate that reads my temporary badge with a chirp I haven't earned. Thirty-eight floors up, an entire department of people who've been doing this since before I shaved decides whether I'm worth remembering. I'm the intern with no pedigree to trade on, and this is the tallest ladder I've ever stood at the bottom of.
<<set _spent to false>>
<div class="loc-nav">
<<button "Report for your first day (8h)">>
<<run CL2.advanceTime(480)>>
<<set $energy to Math.max(0, $energy - 18)>>
<<set $stress to Math.min(100, $stress + 10)>>
<<set $reach to Math.max($reach, 1)>>
<<replace "#bank-out">>
Eight hours of badges, binders, and a compliance video older than my marriage. My desk is a borrowed one near a window I'm not senior enough to sit beside. But near the end, a director I won't name yet stops on his way past, glances at the spreadsheet I rebuilt without being asked, and says nothing at all. Around here that counts as approval.
I walk out into the evening and remember, two stops down the line, that I'm still wearing the temporary badge. I leave it where it is the rest of the way home. I'm at the bottom of the department on day one, and I plan to be here a long time.
<div class="loc-earn">First day logged · +Reach</div>
<div class="loc-nav">
<<button "Head home">><<goto "Apartment">><</button>>
</div>
<</replace>>
<</button>>
</div>
<div id="bank-out"></div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-scene">
<img @src="'img/place/' + (_night ? 'town_night.jpg' : 'town_day.jpg')" alt="The street">
<div class="loc-scrim"></div>
<div class="loc-name"><<if _night>>Tokyo · After Dark<<else>>Tokyo · Daytime<</if>></div>
<span class="hotspot" style="left:20%;top:58%"><<link '<span class="hot-dot"></span><span class="hot-label">Konbini</span>'>><<run CL2.advanceTime(15)>><<goto "Konbini">><</link>></span>
<span class="hotspot" style="left:68%;top:46%"><<link '<span class="hot-dot"></span><span class="hot-label">The bank</span>'>><<run CL2.advanceTime(30)>><<goto "Bank">><</link>></span>
<span class="hotspot" style="left:45%;top:80%"><<link '<span class="hot-dot"></span><span class="hot-label">Home</span>'>><<run CL2.advanceTime(15)>><<goto "Apartment">><</link>></span>
</div>
<<if _night>>\
The street has traded commuters for neon and the low rumble of a city that never fully sleeps. Vending machines glow like small altars. From here I can cut to the konbini for a late shift, or take the train toward the towers downtown.
<<else>>\
Out on the street the morning crowd moves with the quiet purpose of people who are already late. Convenience-store flags snap in the wind; a salaryman's umbrella, the smell of vending-machine coffee. From here the konbini's a short walk, and the express line runs straight to the business district.
<</if>>
<div class="loc-nav">
<<button "Walk to the konbini">><<run CL2.advanceTime(15)>><<goto "Konbini">><</button>>
<<button "Train to the bank">><<run CL2.advanceTime(30)>><<goto "Bank">><</button>>
</div>
<div class="loc-nav loc-nav--quiet">
<<button "Back to the apartment">><<run CL2.advanceTime(15)>><<goto "Apartment">><</button>>
</div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-scene">
<img @src="'img/place/' + (_night ? 'gym_night.jpg' : 'gym_day.jpg')" alt="The gym">
<div class="loc-scrim"></div>
<div class="loc-name">Iron Temple · 24h Gym</div>
</div>
Chalk dust and the clank of plates. Mitake's place stays open past midnight, the only gym in the ward that does, and nothing in here asks what my Reach is — only whether the bar goes up.
<div class="loc-nav">
<<button "Train hard (1h)">>
<<run CL2.advanceTime(60)>>
<<set $energy to Math.max(0, $energy - 14)>>
<<set $stress to Math.max(0, $stress - 12)>>
<<set $fitness to Math.min(100, ($fitness || 0) + 3)>>
<<set $libido_max to Math.min(200, ($libido_max || 100) + 5)>> /* working out raises MAX daily libido -> more sex per day */
<<replace "#gym-out">>
I put in the full hour on the bag and the rack, and the noise in my head goes quiet somewhere in the middle. Mitake refills the chalk bucket and tells me to drink something.
<div class="loc-earn">Stress −12 · Fitness +3 · the body holds</div>
<div class="loc-nav"><<button "Head home">><<goto "Apartment">><</button>></div>
<</replace>>
<</button>>
<<button "Back to the apartment">><<goto "Apartment">><</button>>
</div>
<div id="gym-out"></div><<hud>>\
<div class="loc-scene">
<img src="img/place/ramen_store.jpg" alt="The ramen shop">
<div class="loc-scrim"></div>
<div class="loc-name">Ittetsu Ramen · Shitamachi</div>
</div>
Steam fogs the window; the counter seats eight and the master hasn't touched the recipe in thirty years. Eight hundred yen buys a bowl that tastes like the city before it got expensive.
<div class="loc-nav">
<<button "Order a bowl (30m · ¥1,000)">>
<<if $money lt 1000>>
<<replace "#ramen-out">><div class="loc-warn">Not enough yen for that today.</div><</replace>>
<<else>>
<<run CL2.advanceTime(30)>>
<<set $money -= 1000>>
<<set $energy to Math.min(100, $energy + 18)>>
<<set $stress to Math.max(0, $stress - 8)>>
<<replace "#ramen-out">>
The tonkotsu comes up thick and gold, the soft-boiled egg split in half. I sit at the counter for the full half hour with the noise of the city left at the door. I finish the broth.
<div class="loc-earn">−¥1,000 · Energy +18 · Stress −8</div>
<div class="loc-nav"><<button "Head out">><<goto "Apartment">><</button>></div>
<</replace>>
<</if>>
<</button>>
<<button "Back to the apartment">><<goto "Apartment">><</button>>
</div>
<div id="ramen-out"></div><<hud>>\
<div class="loc-scene">
<img src="img/place/massage_parlor.jpg" alt="The massage parlor">
<div class="loc-scrim"></div>
<div class="loc-name">Aroma · Ginza</div>
</div>
Low light, eucalyptus, the hush of money well spent. An hour here costs what a konbini shift earns — but a man who walks into the tower with his shoulders up around his ears doesn't last. The week I've had, I can justify it.
<div class="loc-nav">
<<button "Book an hour (1h · ¥6,500)">>
<<if $money lt 6500>>
<<replace "#massage-out">><div class="loc-warn">Not enough yen for that today.</div><</replace>>
<<else>>
<<run CL2.advanceTime(60)>>
<<set $money -= 6500>>
<<set $stress to Math.max(0, $stress - 22)>>
<<set $energy to Math.min(100, $energy + 8)>>
<<replace "#massage-out">>
The therapist works down my back and finds every knot the week tied. By the end of the hour I'm half-liquid on the table and not thinking about the tower at all.
<div class="loc-earn">−¥6,500 · Stress −22 · Energy +8</div>
<div class="loc-nav"><<button "Head out">><<goto "Apartment">><</button>></div>
<</replace>>
<</if>>
<</button>>
<<button "Back to the apartment">><<goto "Apartment">><</button>>
</div>
<div id="massage-out"></div><<hud>>\
<div class="loc-scene">
<img src="img/place/hospital_facade.jpg" alt="The clinic">
<div class="loc-scrim"></div>
<div class="loc-name">Nakamura Clinic · Medical District</div>
</div>
Fluorescent calm, antiseptic and old magazines. A walk-in checkup is cheap insurance against the body quitting at the worst possible moment — and the doctor has a way of saying “slow down” that almost sounds like an order you could follow.
<div class="loc-nav">
<<button "Walk-in checkup (1h · ¥2,000)">>
<<if $money lt 2000>>
<<replace "#clinic-out">><div class="loc-warn">Not enough yen for that today.</div><</replace>>
<<else>>
<<run CL2.advanceTime(60)>>
<<set $money -= 2000>>
<<set $energy to Math.min(100, $energy + 14)>>
<<set $stress to Math.max(0, $stress - 10)>>
<<replace "#clinic-out">>
They run the cuff twice and the number comes back a touch high. The doctor tells me to sleep more and cut the coffee, and I nod like a man who intends to. The rest of me is fine.
<div class="loc-earn">−¥2,000 · Energy +14 · Stress −10</div>
<div class="loc-nav"><<button "Head out">><<goto "Apartment">><</button>></div>
<</replace>>
<</if>>
<</button>>
<<button "Back to the apartment">><<goto "Apartment">><</button>>
</div>
<div id="clinic-out"></div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">The genkan — shoes lined up by the door, the narrow corridor running back past the rooms. Keys, wallet, and the whole grinding day waiting on the other side of it.</div>\
<div class="loc-scene loc-scene--big">
<img src="img/place/player_apartment/hallway.jpg" alt="">
<span class="hotspot hotspot--icon" style="left:18%;top:45%;width:8%"><<link '<img src="img/corpo_icon/nav_left.png" alt="Leave — out to the lobby"><span class="hot-label">Leave — out to the lobby</span>' "Apartment Leave">><</link>></span>
<span class="hotspot hotspot--icon" style="left:51%;top:30%;width:4%"><<link '<img src="img/nav/nagi_liv.png" alt="Living room"><span class="hot-label">Living room</span>' "Apartment Living Room">><</link>></span>
<span class="hotspot hotspot--icon" style="left:57%;top:38%;width:4%"><<link '<img src="img/nav/nagi_bed.png" alt="Main bedroom"><span class="hot-label">Main bedroom</span>' "Apartment Main Bedroom">><</link>></span>
<span class="hotspot hotspot--icon" style="left:46%;top:38%;width:4%"><<link '<img src="img/nav/nagi_bed_2.png" alt="Second bedroom"><span class="hot-label">Second bedroom</span>' "Apartment Second Bedroom">><</link>></span>
<span class="hotspot hotspot--icon" style="left:35%;top:30%;width:4%"><<link '<img src="img/nav/nagi_sho.png" alt="Bathroom"><span class="hot-label">Bathroom</span>' "Apartment Bathroom">><</link>></span>
<<if CL2.remuHallway()>><<set $hallway_pending to true>><span class="hotspot hotspot--figure" style="left:26%;top:88%;height:60%"><<link '<img src="img/corpo_icon/remu_icon_6.png" alt="Remu — just home"><span class="hot-label">Remu · just home</span>' "Remu Gohome">><</link>></span><</if>>\
</div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">The main bedroom. The bed half-made, a balcony's worth of soft light, and the quiet of the one room that's only ever been ours.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/player_apartment/' + (_night ? 'bed1_n.jpg' : 'bed1.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:50%;top:95%;width:6%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back to the hallway"><span class="hot-label">Back to the hallway</span>' "Apartment">><</link>></span>
<<if CL2.remuBed()>>\
<span class="hotspot hotspot--figure" style="left:82.5%;top:74%;height:22.5%"><<link '<img src="img/corpo_icon/remu_icon_8.png" alt="Remu — asleep in bed"><span class="hot-label">Remu · asleep</span>' "Remu Night Hub">><</link>></span>\
<<else>>\
<span class="hotspot hotspot--icon" style="left:75%;top:60%;width:6%"><<link '<img src="img/corpo_icon/icon_sleep.png" alt="Turn in for the night"><span class="hot-label">Turn in for the night</span>' "Remu Presleep">><</link>></span>
<span class="hotspot hotspot--icon" style="left:85%;top:60%;width:6%"><<link '<img src="img/corpo_icon/icon_nap.png" alt="Take a nap"><span class="hot-label">Take a nap</span>' "Apartment Nap">><</link>></span>
<</if>>\
<span class="hotspot hotspot--icon" style="left:15%;top:60%;width:7%"><<link '<img src="img/place/player_apartment/icon_pc.png" alt="Open the PC"><span class="hot-label">Open the PC</span>'>><<run CL2.pc.open()>><</link>></span>
</div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">The little second room — a bed, a dresser, a lamp left on. Half spare-room, half someday neither of us says out loud.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/player_apartment/' + (_night ? 'bed2_n.jpg' : 'bed2.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:62%;top:60%;width:6%"><<link '<img src="img/corpo_icon/icon_sleep.png" alt="Sleep here tonight"><span class="hot-label">Sleep here tonight</span>' "Second Bedroom Sleep">><</link>></span>
<span class="hotspot hotspot--icon" style="left:53%;top:95.5%;width:4%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back to the genkan"><span class="hot-label">Back to the genkan</span>' "Apartment">><</link>></span>
</div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">The cramped bathroom — tub, sink, the washer humming through its cycle. Tile cold under bare feet.</div>\
<div class="loc-scene loc-scene--big">
<img src="img/place/player_apartment/bath.jpg" alt="">
<span class="hotspot hotspot--icon" style="left:50%;top:89%;width:6%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back to the hallway"><span class="hot-label">Back to the hallway</span>' "Apartment">><</link>></span>
<span class="hotspot hotspot--icon" style="left:60%;top:38%;width:6%"><<link '<img src="img/shower.png" alt="Take a shower"><span class="hot-label">Take a shower</span>' "Apartment Shower">><</link>></span>
</div><<hud>>\
<<if $pending_weekly_report>><<goto "Weekly Report">><</if>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above"><<if _night>>The radiator ticks in the dark. The city glow leaks orange around the blinds, the TV long off. Two cramped rooms and a closet of a kitchen, a couple of paychecks short of comfortable, and somehow the only place that has ever felt like it was waiting for me.<<else>>Morning light, thin and gray, slides across the floorboards. The kettle's still warm from Remu, and she's somewhere in here, moving quiet and early the way she does. I still have to decide what to do with the day.<</if>></div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/player_apartment/' + (_night ? 'living_n.jpg' : 'living.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:5%;top:40%;width:5.5%"><<link '<img src="img/nav/nagi_kit.png" alt="Into the kitchen"><span class="hot-label">Into the kitchen</span>' "Apartment Kitchen">><</link>></span>
<span class="hotspot hotspot--icon" style="left:50%;top:94%;width:6%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Out to the hallway"><span class="hot-label">Out to the hallway</span>' "Apartment">><</link>></span>
<<if CL2.remuHome()>><span class="hotspot hotspot--figure" style="left:36%;top:89%"><<link '<img src="img/corpo_icon/remu_icon_1.png" alt="Talk to Remu"><span class="hot-label">Talk to Remu</span>' "Remu Home">><</link>></span><</if>>\
<<if CL2.remuEvening()>><span class="hotspot hotspot--figure" style="left:34%;top:78%;height:38%"><<link '<img src="img/corpo_icon/remu_icon_4.png" alt="Sit with Remu"><span class="hot-label">Sit with Remu</span>' "Remu Evening">><</link>></span><</if>>
<<if CL2.remuAfternoon()>><span class="hotspot hotspot--figure" style="left:27%;top:65%;height:27%"><<link '<img src="img/corpo_icon/remu_icon_7.png" alt="Relax with Remu"><span class="hot-label">Relax with Remu</span>' "Remu Afternoon">><</link>></span><</if>>\
</div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">The closet of a kitchen — one tired burner, the rice cooker, the smell of whatever Remu started before I was even up.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/player_apartment/' + (_night ? 'kitchen_n.jpg' : 'kitchen.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:91%;top:58%;width:8%"><<link '<img src="img/corpo_icon/nav_right.png" alt="Back to the living room"><span class="hot-label">Back to the living room</span>' "Apartment Living Room">><</link>></span>\
<<if CL2.remuKitchen()>><span class="hotspot hotspot--figure" style="left:76%;top:87%;height:56%"><<link '<img src="img/corpo_icon/remu_icon_5.png" alt="Join Remu in the kitchen"><span class="hot-label">Join Remu in the kitchen</span>' "Remu Dinner">><</link>></span><</if>>
</div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">The building lobby. Mailboxes, the elevator's tired ding, the glass doors framing the street and whoever's hurrying past on it.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/player_apartment/' + (_night ? 'lobby_n.jpg' : 'lobby.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:89%;top:46%;width:7%"><<link '<img src="img/nav/apt_home.png" alt="Up to your apartment"><span class="hot-label">Up to your apartment</span>' "Apartment">><</link>></span>
<span class="hotspot hotspot--icon" style="left:42%;top:42%;width:7%"><<link '<img src="img/corpo_icon/nav_up.png" alt="Out the front"><span class="hot-label">Out the front</span>' "Apartment Facade">><</link>></span>
</div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">Out front. The building at my back, the neighbourhood running off both ways, the city's low morning roar already warming up.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/player_apartment/' + (_night ? 'facade_n.jpg' : 'facade.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:26%;top:70%;width:7%"><<link '<img src="img/nav/apt_home.png" alt="Back inside"><span class="hot-label">Back inside</span>' "Apartment Lobby">><</link>></span>
<span class="hotspot hotspot--icon" style="left:93%;top:70%;width:6%"><<link '<img src="img/corpo_icon/nav_right.png" alt="Toward the station"><span class="hot-label">Toward the station</span>' "Train Station District">><</link>></span>
<span class="hotspot hotspot--icon" style="left:6%;top:70%;width:6%"><<link '<img src="img/corpo_icon/nav_left.png" alt="Into the neighborhood"><span class="hot-label">Into the neighborhood</span>' "Residential District">><</link>></span>
</div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">The neighbourhood — low houses, a konbini sign buzzing, someone's laundry strung across a balcony. Ours, for now, on what <<if $mub_rank gte 1>>the bank<<else>>the store<</if>> pays.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/' + (_night ? 'residential_night.jpg' : 'residential_day.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:70%;top:50%;width:5%"><<link '<img src="img/nav/konbini.png" alt="Family Mart (Ririko's)"><span class="hot-label">Family Mart (Ririko's)</span>' "Konbini">><</link>></span>
<span class="hotspot hotspot--icon" style="left:44%;top:40%;width:5%"><<link '<img src="img/nav/class_aunt.png" alt="Ririko's house"><span class="hot-label">Ririko's house</span>' "Ririko House">><</link>></span>
<span class="hotspot hotspot--icon" style="left:9%;top:91%;width:5%"><<link '<img src="img/nav/nav_left.png" alt="The poorer district"><span class="hot-label">The poorer district</span>' "Mazushii District">><</link>></span>
<span class="hotspot hotspot--icon" style="left:95%;top:82%;width:5%"><<link '<img src="img/nav/ic_station.png" alt="Toward the station"><span class="hot-label">Toward the station</span>' "Train Station District">><</link>></span>
</div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">The station district — turnstiles, the timetable's two-note chime, the platform that feeds this whole grinding city its workers every morning. Our building's right here on the corner.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/' + (_night ? 'residential_station_n.jpg' : 'residential_station.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:41%;top:43%;width:7%"><<link '<img src="img/res_apt.png" alt="Your apartment building"><span class="hot-label">Your apartment building</span>' "Apartment Facade">><</link>></span>
<span class="hotspot hotspot--icon" style="left:73%;top:53%;width:9%"><<link '<img src="img/nav/ic_station.png" alt="Board a train"><span class="hot-label">Board a train</span>' "Tokyo Map">><</link>></span>
<span class="hotspot hotspot--icon" style="left:17%;top:50%;width:5%"><<link '<img src="img/nav/ic_res.png" alt="Into the neighbourhood"><span class="hot-label">Into the neighbourhood</span>' "Residential District">><</link>></span>
</div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">The rough end of the ward. Shutters down, paint peeling, vending machines glowing in the gloom — the part of the map the brochures quietly skip.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/' + (_night ? 'residential_mazushii_n.jpg' : 'residential_mazushii.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:50%;top:90%;width:6%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back to the neighborhood"><span class="hot-label">Back to the neighborhood</span>' "Residential District">><</link>></span>
</div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">Aunt Ririko's place — neat as a pin, not a thing out of order. The woman who owns the konbini, the building, and most of the reason I can still make rent, just past that door.<<if $ririko_car_offer>> And on the driveway pad now: the silver Sorento, parked square, keys under the visor — exactly as the message promised.<</if>></div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/home_1/' + (_night ? 'facade_night.jpg' : 'facade_day.jpg')" alt="">
<<if $ririko_car_offer>>\
/* ★ 0.03: the parked Sorento (piece 1) — the CAR ITSELF is the trip trigger (piece 2: Saturday, up to
noon; CL2.akigawa.go carries the gates + in-fiction refusals). Coords first-pass, author nudges. */
<span class="hotspot hotspot--sorento" style="left:75%;top:81%;width:33%"><<link '<img src="img/corpo_icon/kia_sorento.png" alt="Ririko's Sorento"><span class="hot-label">The Sorento — the valley’s that way</span>'>><<run CL2.akigawa.go()>><</link>></span>
<</if>>\
<span class="hotspot hotspot--icon" style="left:50%;top:94%;width:6%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back to the street"><span class="hot-label">Back to the street</span>' "Residential District">><</link>></span>
</div><<hud>>\
/* ★ the KONBINI PLAN DOOR (author spec 2026-07-20): the floor doesn't run on an unset plan. Day 1 the key is
$tut_plan_saved (the defaults are valid but the manager hasn't signed them); every later week it's the
Saturday-wiped $store_plan_set. Routes through the stop beat into the terminal; backing out to the street
is allowed — using the floor isn't. */
<<if (not $konbini_closed) and CL2.isManager() and ((not $tut_plan_saved) or (not $store_plan_set))>><<goto "Konbini Plan Stop">><</if>>\
<<run CL2.konbiniPresence()>>\
<<set _night to ($min lt 360 or $min gte 1080)>>\
<<set _slot to ($min lt 720 ? "Morning" : ($min lt 1080 ? "Afternoon" : "Night"))>>\
<<set _pay to ($min lt 720 ? 3700 : ($min lt 1080 ? 4100 : 4600))>>\ /* real one-off pay, statutory-anchored: ~3h × ¥1,226 (+ evening premium) — spec §3 */
<div class="loc-prose loc-prose--above">RIRIKO MART — my store now, in everything but the name over the door. Fluorescent hum, the bento case, the door chime that never stops. Remu's somewhere on the floor running it tighter than I ever could, and the week's numbers come off these shelves, whatever the terminal says later.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/konbini/' + (_night ? 'konbini_counter_n.jpg' : 'konbini_counter.jpg')" alt="The konbini counter">
<span class="hotspot hotspot--icon" style="left:10%;top:87%;width:7%"><<link '<img src="img/a_icon.png" alt="Shelf A"><span class="hot-label">Shelf A</span>' "Konbini A">><</link>></span>
<span class="hotspot hotspot--icon" style="left:90%;top:87%;width:7%"><<link '<img src="img/b_icon.png" alt="Shelf B"><span class="hot-label">Shelf B</span>' "Konbini B">><</link>></span>
<span class="hotspot hotspot--icon" style="left:25%;top:35%;width:5%"><<link '<img src="img/corpo_icon/staff_icon.png" alt="Manager's office"><span class="hot-label">Manager's office</span>' "Konbini Office">><</link>></span>
<span class="hotspot hotspot--icon" style="left:95%;top:52%;width:7%"><<link '<img src="img/exit_icon.png" alt="Out to the street"><span class="hot-label">Out to the street</span>' "Residential District">><</link>></span>
<<if CL2.remuKonbiniTask() is "cashier">><span class="hotspot hotspot--figure" style="left:63%;top:100%;height:60%"><<link '<img src="img/corpo_icon/remu_icon_2.png" alt="Help Remu at the register"><span class="hot-label">Remu · at the register</span>' "Konbini Remu">><</link>></span><</if>>
<<if $pres_mary>><span class="hotspot hotspot--figure" style="left:42%;top:60.3%;height:25%"><<link '<img src="img/corpo_icon/mary_icon_1.png" alt="Mary"><span class="hot-label">Mary</span>' "Konbini Mary">><</link>></span><</if>>
</div>
<div class="loc-below">
<<if $konbini_closed>>\
<div class="loc-earn loc-earn--bad">The shutters are down. Three losing weeks and Aunt Ririko pulled the plug — go and see her to reopen.</div>
<div class="loc-nav"><<button "Go see Aunt Ririko">><<goto "Konbini Reopen">><</button>></div>
<<else>>\
<div class="loc-earn">Floor shift: <<= _slot>> rush · pays ¥<<= _pay.toLocaleString()>> · about three hours behind the register.</div>
<div class="loc-nav">
<<if $konbini_shifts_today gte 2>>\
<<button "Done for the day (2 shifts worked)">><<goto "Konbini">><</button>>
<<elseif $energy lt 10>>\
<<button "Too drained to work the floor">><<goto "Konbini">><</button>>
<<else>>\
<<button "Work a register shift">>
<<set $money to $money + _pay>>
<<set $konbini_shifts_worked to $konbini_shifts_worked + 1>>
<<set $konbini_shifts_today to $konbini_shifts_today + 1>>
<<run CL2.advanceTime(180)>>
<<set $energy to Math.max(0, $energy - 12)>>
<<set $konbini_last_pay to _pay>><<set $konbini_last_slot to _slot>>
<<goto "Konbini Shift Done">>
<</button>>
<</if>>
</div>
<</if>>
</div><<hud>>\
<div class="loc-prose loc-prose--above">The drawer reconciles to the yen. Remu glances over from the bento case, gives the small nod that means <i>off by zero again</i>, and waves me off the floor. Honest money, and it took three hours to make.</div>\
<div class="loc-scene loc-scene--big">
<img src="img/place/konbini/konbini_counter.jpg" alt="The konbini counter">
</div>
<<run CL2.toast('Shift Complete', ($konbini_last_slot || 'Floor') + ' shift done — earned ¥' + ($konbini_last_pay || 0).toLocaleString() + '. Shifts worked: ' + ($konbini_shifts_worked || 0) + (($konbini_shifts_worked || 0) < 20 ? ' / 20 toward a promotion' : ''))>>\
<div class="loc-below">
<div class="loc-nav">
<<button "Back to the floor">><<goto "Konbini">><</button>>
<<button "Head home">><<run CL2.advanceTime(15)>><<goto "Apartment Living Room">><</button>>
</div>
</div><<hud>>\
<<run CL2.konbiniPresence()>>\
<div class="loc-prose loc-prose--above">Shelf A — the dry aisle. Instant noodles faced to the front, the magazine rack, the steady tick of the cooler compressor. The staff door to the break room is back here.</div>\
<div class="loc-scene loc-scene--big">
<img src="img/place/konbini/shelf_a.jpg" alt="Shelf A">
<span class="hotspot hotspot--icon" style="left:68%;top:45%;width:6%"><<link '<img src="img/corpo_icon/konbini_breakroom_icon.png" alt="Break room"><span class="hot-label">Break room</span>' "Konbini Breakroom">><</link>></span>
<span class="hotspot hotspot--icon" style="left:8%;top:55%;width:7%"><<link '<img src="img/corpo_icon/nav_left.png" alt="Counter"><span class="hot-label">Counter</span>' "Konbini">><</link>></span>
<span class="hotspot hotspot--icon" style="left:92%;top:55%;width:7%"><<link '<img src="img/corpo_icon/nav_right.png" alt="Shelf B"><span class="hot-label">Shelf B</span>' "Konbini B">><</link>></span>
</div><<hud>>\
<<run CL2.konbiniPresence()>>\
<div class="loc-prose loc-prose--above">Shelf B — drinks and fresh. The reach-in cooler glows; the bento case down the end is where the real margin lives or dies each day. The storeroom door is at the back.</div>\
<div class="loc-scene loc-scene--big">
<img src="img/place/konbini/shelf_b.jpg" alt="Shelf B">
<span class="hotspot hotspot--icon" style="left:56%;top:46%;width:6%"><<link '<img src="img/sport_storage.png" alt="Storage"><span class="hot-label">Storage</span>' "Konbini Storage">><</link>></span>
<span class="hotspot hotspot--icon" style="left:8%;top:55%;width:7%"><<link '<img src="img/corpo_icon/nav_left.png" alt="Shelf A"><span class="hot-label">Shelf A</span>' "Konbini A">><</link>></span>
<span class="hotspot hotspot--icon" style="left:92%;top:55%;width:7%"><<link '<img src="img/corpo_icon/nav_right.png" alt="Counter"><span class="hot-label">Counter</span>' "Konbini">><</link>></span>
<<if CL2.remuKonbiniTask() is "shelf">><span class="hotspot hotspot--figure" style="left:67%;top:84%;height:58%"><<link '<img src="img/corpo_icon/remu_icon_3.png" alt="Help Remu stock Shelf B"><span class="hot-label">Remu · restocking</span>' "Konbini Remu Shelf">><</link>></span><</if>>
</div><<hud>>\
<div class="loc-prose loc-prose--above">The break room — a kettle, a sagging couch, last month's roster still pinned to the cork. The one place in the building the door chime can't reach.</div>\
<div class="loc-scene loc-scene--big">
<img src="img/place/konbini/staff_longue.jpg" alt="The staff break room">
<span class="hotspot hotspot--icon" style="left:34%;top:48%;width:5%"><<link '<img src="img/exit_icon.png" alt="Back to Shelf A"><span class="hot-label">Back to Shelf A</span>' "Konbini A">><</link>></span>
</div>
<div class="loc-below">
<div class="loc-nav">
<<if $energy gte 100>>\
<<button "Already rested">><<goto "Konbini Breakroom">><</button>>
<<else>>\
<<button "Take ten on the couch (+energy)">>
<<run CL2.advanceTime(60)>>
<<set $energy to Math.min(100, $energy + 10)>>
<<goto "Konbini Breakroom">>
<</button>>
<</if>>
</div>
</div><<hud>>\
<div class="loc-prose loc-prose--above">The storeroom — cardboard canyons, the walk-in cooler breathing cold, a clipboard of delivery dockets. Where the orders I set on the terminal actually land.</div>\
<div class="loc-scene loc-scene--big">
<img src="img/place/konbini/storage.jpg" alt="The storeroom">
<span class="hotspot" style="left:50%;top:14%"><<link '<span class="hot-dot"></span><span class="hot-label">Toilet</span>' "Konbini Toilet">><</link>></span>
<span class="hotspot hotspot--icon" style="left:50%;top:91%;width:7%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back to Shelf B"><span class="hot-label">Back to Shelf B</span>' "Konbini B">><</link>></span>
</div><<hud>>\
<<set _night to ($min lt 360 or $min gte 1080)>>\
<div class="loc-prose loc-prose--above">The staff washroom. A cracked mirror, a hand-dryer that groans. I straighten the tie, meet my own eye, and go back out as the manager.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/konbini/' + (_night ? 'toilet_n.jpg' : 'toilet.jpg')" alt="The staff washroom">
<span class="hotspot hotspot--icon" style="left:8%;top:88%;width:7%"><<link '<img src="img/exit_icon.png" alt="Back to storage"><span class="hot-label">Back to storage</span>' "Konbini Storage">><</link>></span>
</div><<hud>>\
<<run CL2.initKonbini()>>\
<div class="loc-prose loc-prose--above">The manager's office — a desk, the safe, and the terminal where a week's worth of orders, prices and rosters gets decided. This is where the store is actually run.</div>\
<div class="loc-scene loc-scene--big">
<img src="img/place/konbini/manager_office.jpg" alt="The manager's office">
<span class="hotspot hotspot--icon" style="left:80%;top:42%;width:7%"><<link '<img src="img/corpo_icon/nav_right.png" alt="Back to the counter"><span class="hot-label">Back to the counter</span>' "Konbini">><</link>></span>
<span class="hotspot hotspot--icon" style="left:41%;top:45%;width:5%"><<link '<img src="img/work.png" alt="Management terminal"><span class="hot-label">Management terminal</span>' "Konbini Management">><</link>></span>
</div>
<div class="loc-below">
<div class="kt-statusbar">
<span class="kt-stat"><span class="kt-stat-l">Week</span><span class="kt-stat-v"><<= $store_week>></span></span>
<span class="kt-stat"><span class="kt-stat-l">Store cash</span><span class="kt-stat-v">¥<<= $store_cash.toLocaleString()>></span></span>
<span class="kt-stat"><span class="kt-stat-l">Next settle</span><span class="kt-stat-v"><<= $store_forecast_level>><<if $store_forecast_skew neq "none">> · <<= $store_forecast_skew>><</if>></span></span>
</div>
<div class="loc-nav">
<<if $konbini_closed>>\
<<button "Store closed — see Aunt Ririko">><<goto "Konbini Reopen">><</button>>
<<else>>\
<<button "Open the management terminal">><<goto "Konbini Management">><</button>>
<</if>>
</div>
</div>/* CASHIER work-chat (CL2.conv). Reached from the "at the register" sprite during cashier hours. Helping = +sales +retail XP (once/day). */
<<hud>>
<<set _help to CL2.konbiniHelp('cashier')>><<if _help>><<run CL2.toast("Lent Remu a hand", (_help.sales > 0 ? "Worked the register with her — store sales +¥" + _help.sales.toLocaleString() + ", retail skill +" + _help.retail : "Worked the register with her again — today’s sales lift is already counted; retail skill +" + _help.retail) + " — energy −" + _help.energy + ", stress +" + _help.stress + ".")>><</if>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_REMU_CASHIER_CONV, leaveTo : "Konbini" })>><</timed>>/* SHELF B work-chat (CL2.conv). Reached from the "restocking" sprite at the cold case during shelf hours. Helping = +sales +retail XP (once/day). */
<<hud>>
<<set _help to CL2.konbiniHelp('shelf')>><<if _help>><<run CL2.toast("Lent Remu a hand", (_help.sales > 0 ? "Restocked the cold case with her — store sales +¥" + _help.sales.toLocaleString() + ", retail skill +" + _help.retail : "Restocked the cold case with her again — today’s sales lift is already counted; retail skill +" + _help.retail) + " — energy −" + _help.energy + ", stress +" + _help.stress + ".")>><</if>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_REMU_SHELF_CONV, leaveTo : "Konbini B" })>><</timed>><<hud>>\
<<set _who to $konbini_chat_who>>\
<<set _name to ({mary:"Mary", ami:"Ami", asano:"Asano", hina:"Hina"})[_who] || "the staff">>\
<<set _line to ({
mary: either("“Manager on the floor — relax, I faced the whole wall before you got in.” Mary grins, the senior attendant who could run this place blindfolded.","“Slow start, then the lunch crowd hit like a wave. We held it.”"),
ami: either("“Re-ordered the drinks myself, the forecast said heatwave.” Ami doesn't waste words; her till is always exact.","“If you're going to ask me to cover Saturday, the answer's yes, but I'm putting it on the roster this time.”"),
asano: either("“Yo, boss.” Asano lifts a lazy two-finger salute from the cooler. “Stocked, swept, didn't break anything. Banner day.”","“Late shift again? I don't mind. Quiet store, good music, nobody breathing down my neck.”"),
hina: either("Hina startles, then bows too fast. “A—ah, Manager! The shelf's done, I promise, I just—” She's trying so hard it aches a little.","“I counted it twice to be sure,” Hina says, holding out the docket like homework. “Is… is it right?” It is.")
})[_who] || "A nod, a word, the easy shorthand of people who work a floor together.">>\
<<set _key to "chat_" + _who>>\
<<if not $dayFlags[_key] and ({mary:1,ami:1,asano:1,hina:1})[_who]>>\
<<if not (def $staff_happy)>><<run CL2.initKonbini()>><</if>>\
<<set $staff_happy[_who] to Math.min(100, ($staff_happy[_who] || 60) + 4)>>\
<<set $dayFlags[_key] to true>>\
<<set _bumped to true>>\
<</if>>\
<div class="loc-prose loc-prose--above"><<= _line>></div>\
<div class="loc-scene loc-scene--big">
<img src="img/place/konbini/shelf_a.jpg" alt="On the floor">
<span class="hotspot hotspot--portrait" style="left:50%;top:55%"><img @src="'img/icon/' + _who + '_icon.jpg'" alt="<<= _name>>"></span>
</div>
<<if _bumped>><<run CL2.toast('Morale Up', _name + "'s morale ticks up — a minute of the manager's time")>><</if>>\
<div class="loc-below"><div class="loc-nav"><<button "Back to the floor">><<goto "Konbini">><</button>></div></div><<hud>>\
<<run CL2.initKonbini()>>\
<<if not CL2.isManager()>>\
<div class="loc-prose loc-prose--above">This terminal's locked to store management. You don't have the keys to it — yet.</div>
<div class="loc-nav"><<button "Back">><<goto "Konbini Office">><</button>></div>
<<elseif $konbini_closed>>\
<div class="loc-prose loc-prose--above">The terminal's dark. The store's been shut after three losing weeks — Aunt Ririko has to reopen it before any of this means anything.</div>
<div class="loc-nav"><<button "Go see Aunt Ririko">><<goto "Konbini Reopen">><</button>></div>
<<else>>\
<<if not (def $store_tab)>><<set $store_tab to "dashboard">><</if>>\
<<if not (def $staff_sel)>><<set $staff_sel to "mary">><</if>>\
<<set $sc_traffic to ({Slow:0.8, Normal:1, Busy:1.12, Rush:1.25})[$store_forecast_level]>>\
<<run CL2.storeCalc()>>\
<<set _rs to CL2.rosterStats()>>\
<<set _wS to 2>><<set _wV to 2>><<set _wA to 2>>\
<<switch $store_forecast_level>><<case "Slow">><<set _wS to 3>><<set _wV to 1>><<set _wA to 2>><<case "Busy">><<set _wS to 1>><<set _wV to 3>><<set _wA to 2>><<case "Rush">><<set _wS to 1>><<set _wV to 4>><<set _wA to 3>><</switch>>\
<<switch $store_forecast_skew>><<case "rainy">><<set _wA to _wA + 1>><<case "heatwave">><<set _wA to _wA + 1>><<case "festival">><<set _wV to _wV + 1>><<set _wA to _wA + 1>><</switch>>\
<div class="chw kt-window">
<div class="kt-titlebar"><span class="kt-lights"><span class="kt-light kt-light--r" data-kt-close="1" title="Close the terminal"></span><span class="kt-light kt-light--y"></span><span class="kt-light kt-light--g"></span></span><span class="kt-title">Ririko Mart — 店舗管理 Back Office</span><span class="kt-role">Week <<= $store_week>> · Store Manager</span></div>
<div class="kt-tabs">
<<for _tab range [["dashboard","Dashboard"],["stock","Stock 発注"],["pricing","Pricing"],["staff","Staff & Roster"]]>>\
<<= '<button type="button" class="kt-tab' + ($store_tab is _tab[0] ? ' is-on' : '') + '" data-kt-tab="' + _tab[0] + '">' + _tab[1] + '</button>'>>\
<</for>>
</div>
<div class="kt-body">
<<switch $store_tab>>\
<<case "dashboard">>\
<<set _retained to $sc_profit - $sc_mcpay>>\
<<set _mixTot to Math.max(1, $sc_revenue)>>\
/* ★ THE LIVE PROJECTION — the same POS document the Saturday settlement prints, unstamped (figures move with the plan). Reuses the .wkr-* component family so the projection and the settled report read as ONE software. */
<div class="wkr-hero kt-hero">
<div class="wkr-eyebrow">Ririko Mart POS · Month <<= $store_week>> · 月次予測 the month ahead</div>
<div class="wkr-verdict"><<if $sc_revenue lte ($store_week_bonus || 0)>>Nothing on the order book.<<elseif $sc_profit gt 0>>On plan for a black month.<<elseif $sc_profit lt 0>>This plan loses money.<<else>>Break-even — to the yen.<</if>></div>
<div class="wkr-sub"><<if $sc_revenue lte ($store_week_bonus || 0)>>The shelves settle empty unless something’s on order — set the stock, price the aisles, and put people on the floor.<<else>>Projected profit <b><<if $sc_profit lt 0>>−<</if>>¥<<= Math.abs($sc_profit).toLocaleString()>></b> on this plan. The month’s books close Saturday at midnight, while you sleep — profit pools in store cash, your draw lands in your wallet.<</if>></div>
<div class="wkr-chips">
<span class="wkr-chip"><span class="wkr-fcdot" @data-fc="$store_forecast_level"></span> <<= $store_forecast_level>> week<<if $store_forecast_skew neq "none">> · <<= $store_forecast_skew>><</if>></span>
<<if not $store_plan_set>><span class="wkr-chip is-down">⚠ plan not set — two missed weeks loses the store</span><<elseif $tut_plan_saved>><span class="wkr-chip is-up">✓ plan saved</span><<else>><span class="wkr-chip">running on Ririko’s defaults — make it yours</span><</if>>
<span class="wkr-chip">coverage <<= $sc_cov>>%</span>
<span class="wkr-chip is-gold">draw ¥<<= $sc_mcpay.toLocaleString()>></span>
</div>
<div class="kt-projstamp"><b><<if $sc_profit gte 0>>黒字<<else>>赤字<</if>></b><span>見込 · PROJECTED</span><span>AWAITS SATURDAY</span></div>
</div>
<div class="wkr-cards">
<div class="wkr-card"><span class="wkr-card-l">Store Cash</span><span class="wkr-card-v">¥<<= $store_cash.toLocaleString()>></span><span class="wkr-card-s">the store’s own reserves</span></div>
<div class="wkr-card"><span class="wkr-card-l">Your Draw · projected</span><span class="wkr-card-v is-gold">¥<<= $sc_mcpay.toLocaleString()>></span><span class="wkr-card-s">¥100,000 base + 60% of profit</span></div>
<div class="wkr-card"><span class="wkr-card-l">Floor</span><span class="wkr-card-v"><<= $sc_cov>>%</span><span class="wkr-card-s">coverage · skill match <<= $sc_skill>>%</span></div>
<div class="wkr-card"><span class="wkr-card-l">Forecast · 週間予測</span><span class="wkr-card-v"><span class="wkr-fcdot" @data-fc="$store_forecast_level"></span><<= $store_forecast_level>></span><span class="wkr-card-s"><<if $store_forecast_skew is "rainy">>rain — umbrellas & hot food move<<elseif $store_forecast_skew is "heatwave">>heatwave — drinks fly<<elseif $store_forecast_skew is "festival">>festival — foot traffic surges<<else>>clear skies, ordinary appetites<</if>></span></div>
</div>
<div class="wkr-main">
<div class="wkr-panel">
<div class="wkr-ph">Projected P&L — the week ahead<span class="wkr-ph-r">figures move with the plan</span></div>
<div class="wkr-row"><span>Projected revenue</span><b>¥<<= $sc_revenue.toLocaleString()>></b></div>
<<if ($store_week_bonus || 0) gt 0>><div class="wkr-row is-mut"><span> includes your floor help</span><b>+¥<<= $store_week_bonus.toLocaleString()>></b></div><</if>>\
<div class="wkr-row is-ded"><span>Cost of goods</span><b>(¥<<= $sc_cogs.toLocaleString()>>)</b></div>
<div class="wkr-row is-ded"><span>Wages · <<= _rs._bill gt 0 ? "the roster" : "no one rostered">></span><b>(¥<<= $sc_wages.toLocaleString()>>)</b></div>
<div class="wkr-row is-ded"><span>Overhead · lights & leases</span><b>(¥<<= $sc_overhead.toLocaleString()>>)</b></div>
<div class="wkr-rule"></div>
<<= '<div class="wkr-row is-big ' + ($sc_profit >= 0 ? 'is-pos' : 'is-neg') + '"><span>Projected profit</span><b>' + ($sc_profit < 0 ? '−' : '') + '¥' + Math.abs($sc_profit).toLocaleString() + '</b></div>'>>
<div class="wkr-rule"></div>
<div class="wkr-row is-gold"><span>Owner’s draw — you</span><b>¥<<= $sc_mcpay.toLocaleString()>></b></div>
<div class="wkr-row is-mut"><span>Retained by store</span><b><<if _retained lt 0>>(¥<<= Math.abs(_retained).toLocaleString()>>)<<else>>¥<<= _retained.toLocaleString()>><</if>></b></div>
<<if $sc_revenue gt ($store_week_bonus || 0)>>\
<div class="wkr-rule"></div>
<div class="wkr-mix"><i class="is-fresh" @style="'width:' + ($sc_rev_fresh / _mixTot * 100) + '%'"></i><i class="is-drinks" @style="'width:' + ($sc_rev_drinks / _mixTot * 100) + '%'"></i><i class="is-goods" @style="'width:' + ($sc_rev_goods / _mixTot * 100) + '%'"></i><<if ($store_week_bonus || 0) gt 0>><i class="is-help" @style="'width:' + ($store_week_bonus / _mixTot * 100) + '%'"></i><</if>></div>
<div class="wkr-mixleg"><span><i class="is-fresh"></i>Fresh ¥<<= $sc_rev_fresh.toLocaleString()>></span><span><i class="is-drinks"></i>Drinks ¥<<= $sc_rev_drinks.toLocaleString()>></span><span><i class="is-goods"></i>Goods ¥<<= $sc_rev_goods.toLocaleString()>></span><<if ($store_week_bonus || 0) gt 0>><span><i class="is-help"></i>Floor help ¥<<= $store_week_bonus.toLocaleString()>></span><</if>></div>
<</if>>\
</div>
<div class="wkr-panel">
<div class="wkr-ph">Floor & Systems<span class="wkr-ph-r">live</span></div>
<div class="wkr-ob"><span class="wkr-ob-l">Coverage</span><span class="wkr-ob-bar"><i @style="'width:' + Math.min(100, $sc_cov) + '%'"></i><u></u></span><span class="wkr-ob-v"><<= $sc_cov>>%</span></div>
<div class="wkr-ob"><span class="wkr-ob-l">Skill match</span><span class="wkr-ob-bar"><i @style="'width:' + Math.min(100, $sc_skill) + '%'"></i><u></u></span><span class="wkr-ob-v"><<= $sc_skill>>%</span></div>
<div class="wkr-rule"></div>
<div class="wkr-row"><span>Store optimization</span><span class="wkr-pips"><<= (function(sv){ var h=''; for (var p=0; p<(sv.store_opt_cap||10); p++) h += '<i' + (p < (sv.store_optimization||0) ? ' class="on"' : '') + '></i>'; return h; })(State.variables)>> <b class="kt-optb">+<<= $sc_optboost>>%</b></span></div>
<div class="wkr-note" style="margin-top:2px"><<if $store_optimization gte $store_opt_cap>>At the store’s ceiling — an upgrade would raise it.<<else>>Profitable weeks and hands-on floor work push it up — a sharper store at every plan.<</if>></div>
<div class="wkr-rule"></div>
<div class="kt-rew"><span class="kt-rew-l">Sales this week</span><<= CL2.skillCells(_wS, "sales")>></div>
<div class="kt-rew"><span class="kt-rew-l">Service this week</span><<= CL2.skillCells(_wV, "service")>></div>
<div class="kt-rew"><span class="kt-rew-l">Admin this week</span><<= CL2.skillCells(_wA, "admin")>></div>
<div class="wkr-note" style="margin-top:4px">What the forecast pays for — aim the roster at it.</div>
<div class="wkr-rule"></div>
<div class="wkr-row"><span>Wage bill · week</span><b>¥<<= _rs._bill.toLocaleString()>></b></div>
<div class="wkr-note" style="margin-top:0">Remu works the floor free, always.</div>
</div>
</div>
<div class="wkr-fine kt-fine">RIRIKO MART POS · settles Sat 00:00 · three losing weeks shutter the store · figures provisional until settle</div>
<<case "stock">>\
<div class="kt-note">Order for the week ahead. Unsold <b>Fresh</b> is a total write-off; drinks and goods keep most of their value. Match the order to the forecast.</div>
<<for _row range [["fresh","Fresh (bento)","store_order_fresh",180],["drinks","Drinks","store_order_drinks",80],["goods","Goods","store_order_goods",200]]>>\
<div class="kt-stockrow">
<span class="kt-stock-name"><<= _row[1]>><span class="kt-stock-unit">¥<<= _row[3]>>/unit</span></span>
<span class="kt-stepper">
<<capture _row>><<button "−">><<set State.variables[_row[2]] to Math.max(0, State.variables[_row[2]] - 200)>><<goto "Konbini Management">><</button>><</capture>>\
<span class="kt-stock-val"><<= State.variables[_row[2]]>></span>
<<capture _row>><<button "+">><<set State.variables[_row[2]] to State.variables[_row[2]] + 200>><<goto "Konbini Management">><</button>><</capture>>\
</span>
</div>
<</for>>
<div class="kt-orderfoot">Order cost · the month: <b>¥<<= ($store_order_fresh*180 + $store_order_drinks*80 + $store_order_goods*200).toLocaleString()>></b></div>
<<case "pricing">>\
<div class="kt-note">Pricing per aisle. <b>Discount</b> −10% price / +25% demand · <b>Premium</b> +15% price / −22% demand · <b>Standard</b> holds the line.</div>
<<for _pr range [["Fresh","store_price_fresh"],["Drinks","store_price_drinks"],["Goods","store_price_goods"]]>>\
<div class="kt-pricerow">
<span class="kt-price-name"><<= _pr[0]>></span>
<span class="kt-seg">
<<for _opt range [["discount","Disc"],["standard","Std"],["premium","Prem"]]>>\
<<capture _pr, _opt>><<button _opt[1]>><<set State.variables[_pr[1]] to _opt[0]>><<goto "Konbini Management">><</button>><</capture>>\
<</for>>
</span>
<span class="kt-price-now"><<= State.variables[_pr[1]]>></span>
</div>
<</for>>
<<case "staff">>\
<div class="kt-staff">
<div class="kt-staffcards">
<<for _w range [["mary","Mary",4,5,2],["ami","Ami",3,4,5],["asano","Asano",4,5,5],["hina","Hina",3,4,4]]>>\
<<set _wk to _w[0]>>\
<<= '<button type="button" class="kt-scard' + ($staff_sel is _wk ? ' is-sel' : '') + '" data-kt-staff="' + _wk + '"><img class="kt-scard-face" src="img/icon/' + _wk + '_icon.jpg" alt=""><span class="kt-scard-body"><span class="kt-scard-name">' + _w[1] + '<span class="kt-scard-shifts">' + _rs[_wk].shifts + ' shifts</span></span><span class="kt-skrow"><i class="kt-sk-l">S</i>' + CL2.skillCells(_w[2],"sales") + '</span><span class="kt-skrow"><i class="kt-sk-l">V</i>' + CL2.skillCells(_w[3],"service") + '</span><span class="kt-skrow"><i class="kt-sk-l">A</i>' + CL2.skillCells(_w[4],"admin") + '</span></span></button>'>>\
<</for>>
</div>
<div class="kt-staff-row">
<div class="kt-rewards">
<span class="kt-rew-h">⚡ This week rewards · <<= $store_forecast_level>></span>
<div class="kt-rew"><span class="kt-rew-l">Sales</span><<= CL2.skillCells(_wS, "sales")>></div>
<div class="kt-rew"><span class="kt-rew-l">Service</span><<= CL2.skillCells(_wV, "service")>></div>
<div class="kt-rew"><span class="kt-rew-l">Admin</span><<= CL2.skillCells(_wA, "admin")>></div>
</div>
<div class="kt-coverage">
<div class="kt-cov-h">Shift coverage · whole team</div>
<<for _cv range [["Morning", _rs._cov.m],["Afternoon", _rs._cov.a],["Evening", _rs._cov.e]]>>\
<div class="kt-cov-row"><span class="kt-cov-l"><<= _cv[0]>></span><span class="kt-cells"><<= (function(n){ var h = ''; for (var c = 0; c < 5; c++) h += '<span class="kt-cell kt-cell--cov' + (c < Math.round(n) ? ' on' : '') + '"></span>'; return h; })(_cv[1])>></span><span class="kt-cov-n"><<= _cv[1]>></span></div>
<</for>>
<div class="kt-cov-tiles"><div class="kt-cov-tile"><span class="kt-cov-tv"><<= $sc_skill>>%</span><span class="kt-cov-tl">skill match</span></div><div class="kt-cov-tile"><span class="kt-cov-tv"><<= $sc_cov>>%</span><span class="kt-cov-tl">coverage</span></div></div>
<div class="kt-cov-note">Skill match lifts how much demand converts to sales; coverage is how staffed the floor is across the week. Aim the roster at the skills the forecast rewards.</div>
</div>
</div>
<div class="kt-quickfill">
<<button "Clear">><<set $sched[$staff_sel] to [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]>><<goto "Konbini Management">><</button>>\
<<button "AM">><<set $sched[$staff_sel] to [1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0]>><<goto "Konbini Management">><</button>>\
<<button "PM">><<set $sched[$staff_sel] to [0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0]>><<goto "Konbini Management">><</button>>\
<<button "Eve">><<set $sched[$staff_sel] to [0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1]>><<goto "Konbini Management">><</button>>\
<<button "Weekdays">><<set $sched[$staff_sel] to [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0]>><<goto "Konbini Management">><</button>>\
<<button "✨ Optimal">><<run CL2.fillOptimal()>><<goto "Konbini Management">><</button>>
</div>
<div class="kt-roster">
<div class="kt-roster-head"><span><<= ({mary:"Mary",ami:"Ami",asano:"Asano",hina:"Hina"})[$staff_sel]>></span><span>Morning<small>7-12 · ¥6,130+</small></span><span>Afternoon<small>12-17 · ¥6,130+</small></span><span>Evening<small>17-24 · ¥9,195+</small></span></div>
<<for _d to 0; _d lt 7; _d++>>\
<div class="kt-roster-row">
<span class="kt-day"><<= CL2.WEEKDAYS[_d]>></span>
<<for _s to 0; _s lt 3; _s++>>\
<<set _slot to _d * 3 + _s>>\
<<set _on to ($sched[$staff_sel][_slot] is 1)>>\
<<= '<button type="button" class="kt-cellbtn' + (_on ? ' is-on' : '') + '" data-kt-slot="' + _slot + '">' + (_on ? '✓' : ' ') + '</button>'>>\
<</for>>
</div>
<</for>>
</div>
<div class="kt-wk-wells">
<span class="kt-well"><span class="kt-well-l">Energy</span><span class="kt-well-bar"><span class="kt-well-fill" @style="'width:' + $staff_energy[$staff_sel] + '%'"></span></span></span>
<span class="kt-well"><span class="kt-well-l">Mood</span><span class="kt-well-bar"><span class="kt-well-fill kt-well-fill--mood" @style="'width:' + $staff_happy[$staff_sel] + '%'"></span></span></span>
</div>
<div class="kt-rosterfoot">This worker: <b>¥<<= _rs[$staff_sel].wage.toLocaleString()>>/wk</b> · total wage bill <b>¥<<= _rs._bill.toLocaleString()>>/wk</b>. Evening pays the night premium. Remu works the floor free, always.</div>
</div>
<</switch>>
</div>
<<if $store_tab neq "dashboard">>\
<div class="kt-projbar">
<div class="kt-projbar-h">Live projection · <<= $store_forecast_level>> week<<if $store_forecast_skew neq "none">> · <<= $store_forecast_skew>><</if>><<if ($store_week_bonus || 0) gt 0>> · incl. floor help +¥<<= $store_week_bonus.toLocaleString()>><</if>></div>
<div class="kt-projbar-grid">
<div class="kt-pjt"><span class="kt-pjt-l">Revenue</span><span class="kt-pjt-v">¥<<= $sc_revenue.toLocaleString()>></span></div>
<div class="kt-pjt"><span class="kt-pjt-l">Costs</span><span class="kt-pjt-v">¥<<= ($sc_cogs + $sc_wages + $sc_overhead).toLocaleString()>></span></div>
<<= '<div class="kt-pjt"><span class="kt-pjt-l">Profit</span><span class="kt-pjt-v ' + ($sc_profit >= 0 ? 'pos' : 'neg') + '">' + ($sc_profit < 0 ? '−' : '') + '¥' + Math.abs($sc_profit).toLocaleString() + '</span></div>'>>
<div class="kt-pjt"><span class="kt-pjt-l">Your Draw</span><span class="kt-pjt-v pay">¥<<= $sc_mcpay.toLocaleString()>></span></div>
</div>
</div>
<</if>>\
<div class="kt-handsonbar">
<<= '<button type="button" class="kt-handson" data-kt-work="1"><span class="kt-handson-t">🔨 Roll up your sleeves — work the floor</span><span class="kt-handson-s">A few hands-on hours sharpen the store · +Optimization, +Retail skill</span></button>'>>
</div>
<div class="kt-foot">
<span class="kt-fine-foot">RIRIKO MART POS · Week <<= $store_week>> · the plan runs itself once saved</span>
<span class="kt-foot-btns">
<<button "Close">><<set $store_tab to "dashboard">><<goto "Konbini Office">><</button>>\
<<if $store_plan_set and $tut_plan_saved>><span class="kt-saved">✓ Plan saved · settles Saturday</span><<else>><span class="kt-savecta-w">\
/* ★ RIRIKO'S PLAYBOOK (author-ruled 2026-07-20: recommendation strength, honest name — NOT a true optimizer, so
hand-tuning still beats it): her forty years of defaults, scaled to the forecast band + skew, standard prices,
the balanced default roster untouched. Fill AND save in one press — the lazy lane the door promises. */
<<button "Ririko’s playbook — fill & save">>
<<set _bandM to ({Slow:0.8, Normal:1, Busy:1.12, Rush:1.25})[$store_forecast_level] || 1>>
<<set _fM to _bandM * ($store_forecast_skew is "rainy" ? 1.1 : 1)>>
<<set _dM to _bandM * ($store_forecast_skew is "heatwave" ? 1.2 : ($store_forecast_skew is "festival" ? 1.1 : 1))>>
<<set _gM to _bandM * ($store_forecast_skew is "festival" ? 1.1 : 1)>>
<<set $store_order_fresh to Math.round(2800 * _fM / 100) * 100>>
<<set $store_order_drinks to Math.round(5000 * _dM / 100) * 100>>
<<set $store_order_goods to Math.round(2000 * _gM / 100) * 100>>
<<set $store_price_fresh to "standard">><<set $store_price_drinks to "standard">><<set $store_price_goods to "standard">>
<<set $store_plan_set to true>><<set $tut_plan_saved to true>><<set $store_neglect_streak to 0>><<set $store_neglect_notice to false>>
<<run CL2.toast("Ririko’s playbook", "Forty years of defaults, matched to a " + State.variables.store_forecast_level + " week — ordered, priced, saved. Beat her numbers when you’re ready.")>>
<<goto "Konbini Management">>
<</button>>
<<button "Save the plan →">><<set $store_plan_set to true>><<set $tut_plan_saved to true>><<set $store_neglect_streak to 0>><<set $store_neglect_notice to false>><<goto "Konbini Management">><</button>></span><</if>>
</span>
</div>
</div>
<</if>><<hud>>\
<<run CL2.initKonbini()>>\
<<if not CL2.isManager() or $konbini_closed>>\
<div class="loc-prose loc-prose--above">The floor isn't yours to work right now.</div>\
<div class="loc-below"><div class="loc-nav"><<button "Back">><<goto "Konbini Office">><</button>></div></div>
<<elseif ($dayFlags.konbini_work_today || 0) gte 2>>\
<div class="loc-prose loc-prose--above">You've already put in your hands-on hours today — Remu catches your eye from the bento case and tips her head toward the office before you start doing everyone's job for them. Tomorrow.</div>\
<div class="loc-scene loc-scene--big">
<img src="img/place/konbini/konbini_counter.jpg" alt="The konbini floor">
</div>
<div class="loc-below"><div class="loc-nav"><<button "Back to the terminal">><<goto "Konbini Management">><</button>></div></div>
<<else>>\
<<set $dayFlags.konbini_work_today to ($dayFlags.konbini_work_today || 0) + 1>>\
<<set _mins to 120 + Math.round(Math.random() * 60)>>\
<<set _eDrain to Math.round(_mins / 6)>>\
<<set _sGain to Math.round(_mins / 12)>>\
<<run CL2.advanceTime(_mins)>>\
<<set $energy to Math.max(0, ($energy || 0) - _eDrain)>>\
<<set $stress to Math.min(100, ($stress || 0) + _sGain)>>\
<<set $skill_retail to Math.min(100, ($skill_retail || 0) + 2)>>\
<<set $skill_mgmt to Math.min(100, ($skill_mgmt || 0) + 1)>>\
<<set _optTarget to Math.max(0, Math.min(Math.round((($skill_mgmt || 0) + ($skill_retail || 0)) / 14), $store_opt_cap || 10))>>\
<<set _optUp to 0>>\
<<if ($store_optimization || 0) lt _optTarget>><<set $store_optimization to ($store_optimization || 0) + 1>><<set _optUp to 1>><</if>>\
<div id="cv-host"></div>
<<run CL2.toast("Hands-on work · " + (Math.round(_mins / 30) / 2) + " h on the floor", "Retail +2 · Management +1" + (_optUp ? " · Optimization +1" : "") + " — but it takes it out of you: energy −" + _eDrain + ", stress +" + _sGain + ".")>>\
<<run CL2.scene({ video : ["vid/build_1_konbini_0/mc_work_1.mp4", "vid/build_1_konbini_0/mc_work_2.mp4"], shuffle : true, poolId : "konbini_work", beats : window.CL2_KONBINI_WORK, menu : [{ label : "Remu's watching, worried — let her over", go : "Konbini Remu Care", cls : "cv-choice--hard" }, { label : "Back to the terminal", go : "Konbini Management", cls : "cv-choice--go" }] })>>
<</if>><<hud>>\
<<run CL2.advanceTime(10)>>\
<div id="cv-host"></div>
<<run CL2.scene({ video : "vid/build_1_konbini_0/remu_care_start.mp4", poolId : "remu_care_start", beats : window.CL2_REMU_CARE_START, menu : [ { label : "Let her take care of you", go : "Konbini Remu Care Accept", cls : "cv-choice--hard" }, { label : "Wave her off — you're fine", go : "Konbini Remu Brushoff", cls : "cv-choice--ease" } ] })>><<hud>>\
<<set $remu_aff to Math.max(0, ($remu_aff || 0) - 3)>>\
<div id="cv-host"></div>
<<run CL2.toast("You brushed her off", "Remu backs off, quietly stung — closeness −3.")>>\
<<run CL2.scene({ video : "vid/build_1_konbini_0/remu_care_start.mp4", poolId : "remu_brushoff", beats : window.CL2_REMU_BRUSHOFF, menu : [ { label : "Back to the terminal", go : "Konbini Management", cls : "cv-choice--go" } ] })>><<hud>>\
<<run CL2.advanceTime(15)>>\
<<set _firstCare to not ($dayFlags.remu_care_today)>>\
<<if _firstCare>><<set $dayFlags.remu_care_today to true>><<set $stress to Math.max(0, ($stress || 0) - 5)>><<set $remu_aff to Math.min(100, ($remu_aff || 0) + 1)>><</if>>\
<div id="cv-host"></div>
<<if _firstCare>><<run CL2.toast("Remu takes care of you", "She sits you down and fusses — stress −5, closeness +1.")>><</if>>\
<<run CL2.scene({ video : "vid/build_1_konbini_0/remu_care_1.mp4", poolId : "remu_care", beats : window.CL2_REMU_CARE, menu : [ { label : "Chat with her a while", go : "Konbini Remu Chat", cls : "cv-choice--go" }, { label : "Kiss her", go : "Konbini Remu Kiss", cls : "cv-choice--hard" }, { label : "Back to work", go : "Konbini Management", cls : "cv-choice--ease" } ] })>><<hud>>\
<<run CL2.advanceTime(5)>>\
<<set $stress to Math.max(0, ($stress || 0) - 0.5)>>\
<div id="cv-host"></div>
<<run CL2.scene({ video : ["vid/build_1_konbini_0/remu_chat_1.mp4", "vid/build_1_konbini_0/remu_chat_2.mp4"], poolId : "remu_chat", beats : window.CL2_REMU_CHAT, menu : [ { label : "Talk a little more", go : "Konbini Remu Chat", cls : "cv-choice--go" }, { label : "Kiss her", go : "Konbini Remu Kiss", cls : "cv-choice--hard" }, { label : "Back to work", go : "Konbini Management", cls : "cv-choice--ease" } ] })>><<hud>>\
<<run CL2.advanceTime(10)>>\
<<set _firstKiss to not ($dayFlags.remu_kiss_today)>>\
<<if _firstKiss>><<set $dayFlags.remu_kiss_today to true>><<set $stress to Math.max(0, ($stress || 0) - 1)>><<set $remu_aff to Math.min(100, ($remu_aff || 0) + 1)>><</if>>\
<div id="cv-host"></div>
<<if _firstKiss>><<run CL2.toast("A stolen kiss", "At the quiet back of the store — stress −1, closeness +1.")>><</if>>\
<<run CL2.scene({ video : "vid/build_1_konbini_0/remu_kiss_start.mp4", poolId : "remu_kiss", beats : window.CL2_REMU_KISS, menu : [ { label : "Take it further…", go : "Konbini Remu Sex", cls : "cv-choice--cum" }, { label : "Just the kiss — back to work", go : "Konbini Management", cls : "cv-choice--ease" } ] })>><div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data : window.CL2_REMU_KONBINI_SEX, leaveTo : "Konbini Management", recapReturn : "Konbini Management" })>><</timed>><<hud>>\
<<run CL2.initKonbini()>>\
<<set $pending_weekly_report to false>>\
<<run window.CL2 && CL2.audio && CL2.audio.sfx('weekly_report')>>\
<<= CL2.weeklyReportHTML()>><<hud>>
<<run CL2.initKonbini()>>
<<if not $konbini_closed>>\
<div class="loc-prose loc-prose--above">The store's open and running. Nothing to reopen.</div>
<div class="loc-nav"><<button "Back to the floor">><<goto "Konbini">><</button>></div>
<<else>>\
<div class="loc-prose loc-prose--above">Aunt Ririko meets me with the ledger already open, reading glasses down her nose. “Three bad weeks, dear. I closed it so it wouldn't bleed you white.” A pause, not unkind. “Fifty thousand puts fresh stock on the shelves and the shutters back up. After that it's your store to lose again.”</div>\
<div class="loc-scene loc-scene--big">
<img src="img/place/konbini/manager_office.jpg" alt="Aunt Ririko's office">
<span class="hotspot hotspot--portrait" style="left:50%;top:50%"><img src="img/icon/ririko_icon.jpg" alt="Aunt Ririko"></span>
</div>
<div class="kt-statusbar">
<span class="kt-stat"><span class="kt-stat-l">Reopen cost</span><span class="kt-stat-v">¥200,000</span></span>
<span class="kt-stat"><span class="kt-stat-l">Your wallet</span><span class="kt-stat-v">¥<<= $money.toLocaleString()>></span></span>
</div>
<div class="loc-nav">
<<if $money gte 200000>>\
<<button "Pay ¥200,000 and reopen">>
<<set $money to $money - 200000>>
<<set $konbini_closed to false>>
<<set $store_loss_streak to 0>>
<<set $store_plan_set to false>>
<<goto "Konbini">>
<</button>>
<<else>>\
<<button "Can't cover it yet (¥200,000)">><<goto "Konbini">><</button>>
<</if>>
<<button "Not today">><<goto "Konbini">><</button>>
</div>
<</if>>/* Mary's konbini work-chat (CL2.conv): DAY register / NIGHT restock, picked by $min. Reached from her storefront sprite ($pres_mary roster slot). Helping = +sales +retail XP. */
<<hud>>\
<<set $mary_met to true>>\
<<set _help to CL2.konbiniHelp('cashier')>><<if _help>><<run CL2.toast("Lent Mary a hand", (_help.sales > 0 ? "Worked the floor with her — store sales +¥" + _help.sales.toLocaleString() + ", retail skill +" + _help.retail : "Worked the floor with her again — today’s sales lift is already counted; retail skill +" + _help.retail) + " — energy −" + _help.energy + ", stress +" + _help.stress + ".")>><</if>>\
<div id="cv-host"></div>
<<if $min gte 1080 or $min lt 360>>\
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_MARY_NIGHT_CONV, leaveTo : "Konbini" })>><</timed>>\
<<else>>\
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_MARY_DAY_CONV, leaveTo : "Konbini" })>><</timed>>\
<</if>>/* Router from the night work-chat's "the thing between us" trigger — branches on $mary_affair. */
<<if $mary_affair is "ongoing">><<goto "Mary Storage Sex">>\
<<elseif $mary_affair is "ended">><<goto "Mary Reconcile">>\
<<else>><<goto "Mary Affair Decision">><</if>>/* The player-paced pivot: Mary asks how they proceed now he's married. End / Continue. */
<<hud>>
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.scene({ video : "vid/build_1_mary_0/work_n_1.mp4", beats : window.CL2_MARY_DECISION.ask, poolId : "mary_ask", herName : "Mary", herIcon : "mary_icon", menu : [ { label : "End it — I'm a married man now", go : "Mary Affair End" }, { label : "I can't stay away from you", go : "Mary Affair Continue" } ] })>><</timed>>/* ENDED: she stays on staff but her work performance drops (staff_happy.mary). Winnable back in a later build. */
<<run CL2.initKonbini()>>\
<<set $mary_affair to "ended">>\
<<set $staff_happy.mary to 22>>\
<<run CL2.toast("You ended it with Mary", "She takes it standing — but her morale on the floor drops, and the store feels it. You could mend it in time.")>>\
<<hud>>
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.scene({ video : "vid/build_1_mary_0/work_n_2.mp4", beats : window.CL2_MARY_DECISION.end, poolId : "mary_end", herName : "Mary", herIcon : "mary_icon", menu : [ { label : "Back to the floor", go : "Konbini" } ] })>><</timed>>/* ONGOING: the affair stays alive (storage + apartment scenes open); she stays happy/performant. Light discovery risk accrues over time. */
<<run CL2.initKonbini()>>\
<<set $mary_affair to "ongoing">>\
<<set $staff_happy.mary to Math.min(100, ($staff_happy.mary || 60) + 15)>>\
<<run CL2.toast("The affair continues", "Careful, now — the night shift is quiet, but the roster still has both your names on it.")>>\
<<hud>>
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.scene({ video : "vid/build_1_mary_0/hangout_1.mp4", beats : window.CL2_MARY_DECISION.cont, poolId : "mary_cont", herName : "Mary", herIcon : "mary_icon", menu : [ { label : "Back to the floor", go : "Konbini" } ] })>><</timed>>/* Phase C: the konbini STORAGE quickie (CL2_MARY_STORAGE_SEX, build_1_mary_2). Reached from the night work-chat when $mary_affair is ongoing (via Mary Night Action). Repeatable; tracks Mary's ledger + discovery, NOT the wife's day-trackers. */
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data : window.CL2_MARY_STORAGE_SEX, leaveTo : "Konbini", recapReturn : "Konbini" })>><</timed>>/* STUB — the ended-state win-back path (mend it over time -> reopens the affair + restores her perf). A later build. */
<<hud>>\
<div class="loc-prose loc-prose--above">Mary gives you a flat look over the cold case — not cold exactly, just guarded, the door not quite shut. <i>(Winning her back is a later build; for now the affair stays ended.)</i></div>
<div class="loc-below"><div class="loc-nav"><<button "Back to the floor">><<goto "Konbini">><</button>></div></div><<hud>>
<<run CL2.advanceTime(15)>>\
<<set _n to ($dayFlags.shower_count || 0)>>\
<<set $dayFlags.shower_count to _n + 1>>\
<<set _ds to Math.floor(10 * Math.pow(0.5, _n))>>\
<<set _de to Math.floor(6 * Math.pow(0.5, _n))>>\
<<set _dl to Math.floor(5 * Math.pow(0.5, _n))>>\
<<set _first to (_n is 0)>><<set _any to (_ds + _de + _dl) gt 0>>\
<<set _tier to (_first ? "first" : (_any ? "repeat" : "none"))>>\
<<set $stress to Math.max(0, $stress - _ds)>>\
<<set $energy to Math.min(100, $energy + _de)>>\
<<set $libido to Math.min(100, $libido + _dl)>>\
<div id="cv-host"></div>
<<set _tsub to "Showered · 15 min">>\
<<if _ds gt 0>><<set _tsub to _tsub + " · Stress −" + _ds>><</if>>\
<<if _de gt 0>><<set _tsub to _tsub + " · Energy +" + _de>><</if>>\
<<if _dl gt 0>><<set _tsub to _tsub + " · Libido +" + _dl>><</if>>\
<<if not _any>><<set _tsub to _tsub + " · already spotless, no effect">><</if>>\
<<run CL2.toast(_first ? "Refreshed" : (_any ? "A Quick Rinse" : "Already Spotless"), _tsub)>>\
<<set _shmenu to []>>\
<<if $min lt 540 and not $dayFlags.remu_shower_join>><<set _shmenu.push({ label : "Remu slips in with you…", go : "Remu Shower Together", cls : "cv-choice--cum" })>><</if>>\
<<set _shmenu.push({ label : "Dry off and step out", go : "Apartment Bathroom", cls : "cv-choice--go" })>>\
<<run CL2.scene({ video : "vid/build_1_apt_act/man_showering.mp4", poolId : "shower_" + _tier, beats : window.CL2_SHOWER[_tier], menu : _shmenu })>><<hud>>
<<set _n to ($dayFlags.nap_count || 0)>>\
<<set $dayFlags.nap_count to _n + 1>>\
<<set _de to Math.floor(25 * Math.pow(0.5, _n))>>\
<<set _ds to Math.floor(8 * Math.pow(0.5, _n))>>\
<<set _first to (_n is 0)>><<set _any to (_de + _ds) gt 0>>\
<<set _tier to (_first ? "first" : (_any ? "repeat" : "none"))>>\
<<run CL2.advanceTime(90)>>\
<<set $energy to Math.min(100, $energy + _de)>>\
<<set $stress to Math.max(0, $stress - _ds)>>\
<<set _tsub to "Napped ~90 min">>\
<<if _de gt 0>><<set _tsub to _tsub + " · Energy +" + _de>><</if>>\
<<if _ds gt 0>><<set _tsub to _tsub + " · Stress −" + _ds>><</if>>\
<<if not _any>><<set _tsub to _tsub + " · already rested, no effect">><</if>>\
<<run CL2.toast(_first ? "Rested" : (_any ? "A Short Lie-Down" : "Not Even Tired"), _tsub)>>\
<div id="cv-host"></div>
<<run CL2.scene({ video : "vid/build_1_apt_act/alone_nap.mp4", poolId : "nap_" + _tier, beats : window.CL2_NAP[_tier], menu : [{ label : "Up again", go : "Apartment Main Bedroom", cls : "cv-choice--go" }] })>><<hud>>\
<<set $dayFlags.remu_shower_join to true>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_REMU_SHOWER_CONV, leaveTo : "Apartment Bathroom" })>><</timed>><<hud>>\
<<set $dayFlags.remu_hallway_seen to true>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_REMU_GOHOME_CONV, leaveTo : "Apartment Living Room" })>><</timed>>/* The cross-ward transit link (PHONE of the travel system: a scene between wards). Time is charged ONCE
at boarding (travel() in 03-script); exiting here is free. $train_dest picks the arrival platform. */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">The Chuo Line does what it always does — packs half of Tokyo into one carriage and hauls it across the city. The suits sway together on the turns, somebody's phone buzzes twice, and nobody looks up. The skyline goes past the windows in pieces while I hold onto the strap.</div>\
<<set _arr to CL2.wardArrival($train_dest)>>\
<<set _off to '<img src="img/corpo_icon/nav_up.png" alt="Off the train"><span class="hot-label">' + _arr.label + '</span>'>>\
<<set _dest to _arr.p>>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/train/' + (_night ? 'train_n.jpg' : 'train.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:50%;top:30%;width:6%"><<link _off _dest>><</link>></span>
</div>/* Tokyo Station, Marunouchi North Dome (station_interior.jpg — indoor, time-neutral). Chiyoda's hub:
the train icon (middle-lower center, user-specced) opens the Transit map; nav_left exits to the plaza. */
<<hud>>\
<<set $cur_ward to "chiyoda">>\
<div class="loc-prose loc-prose--above">The Marunouchi dome — a century of brick and ironwork over ten thousand commuters a day. The departure boards flicker through their columns, and the ad panels underneath them sell watches and private banking. Nakano is further down this same line. Nothing there has a ceiling like this.</div>\
<div class="loc-scene loc-scene--big">
<img src="img/place/chiyoda/station_interior.jpg" alt="">
<span class="hotspot hotspot--icon" style="left:50%;top:93%;width:6%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Out to Marunouchi"><span class="hot-label">Out — the Marunouchi exit</span>' "Marunouchi Plaza">><</link>></span>
<span class="hotspot hotspot--icon" style="left:50%;top:55%;width:7%"><<link '<img src="img/nav/ic_station.png" alt="Board a train"><span class="hot-label">Board a train</span>' "Tokyo Map">><</link>></span>
</div>/* station_facade.jpg — the red-brick station at your back, the financial district ahead.
USER SPEC: a single nav_right at x≈90-100 -> the financial district. The station re-entry hotspot on the
centre doors is MY addition (without it Chiyoda soft-locks — the only way home is the map INSIDE the station).
★ AUTHOR SPEC 2026-08-08: nav_left at the EXACT mirror of the nav_right (x7/y70, width 5%) -> the
entertainment street (entertainment_district_1 art). */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">The plaza opens out wide — the old station's brick spine behind me, the lawns in the middle, and past them the glass wall of the financial district. The megabanks keep their logos up near the top of the glass, high enough that you have to stop walking to read them.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/chiyoda/' + (_night ? 'station_facade_n.jpg' : 'station_facade.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:93%;top:70%;width:5%"><<link '<img src="img/corpo_icon/nav_right.png" alt="Into the financial district"><span class="hot-label">The financial district</span>' "Financial District">><</link>></span>
<span class="hotspot hotspot--icon" style="left:7%;top:70%;width:5%"><<link '<img src="img/corpo_icon/nav_left.png" alt="The entertainment street"><span class="hot-label">The entertainment street</span>' "Entertainment District">><</link>></span>
<span class="hotspot hotspot--icon" style="left:50%;top:70%;width:5%"><<link '<img src="img/nav/ic_station.png" alt="Back into the station"><span class="hot-label">Into the station</span>' "Chiyoda Station">><</link>></span>
</div>/* west_financial_district.jpg — the walk along the station's flank into the glass canyon.
USER SPEC: ic_cbd at x≈85-90 / y≈25-35 -> the MUB tower (asset delivered: img/corpo_icon/ic_cbd.png).
The back-to-plaza nav_left is MY addition. */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">Marunouchi proper. Granite pavement, glass towers, and the air-conditioning leaking out of every lobby door onto the street. The people who set what a rice ball costs at my till in Nakano work somewhere above the fifth floor of one of these.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/chiyoda/' + (_night ? 'west_financial_district_n.jpg' : 'west_financial_district.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:87%;top:30%;width:6%"><<link '<img src="img/corpo_icon/ic_cbd.png" alt="The MUB tower"><span class="hot-label">MUB — Mitsuba United Bank</span>' "MUB Tower">><</link>></span>
<span class="hotspot hotspot--icon" style="left:7%;top:72%;width:6%"><<link '<img src="img/corpo_icon/nav_left.png" alt="Back to the plaza"><span class="hot-label">Back to the plaza</span>' "Marunouchi Plaza">><</link>></span>
</div>/* ★ the hotel BEDROOM (author specs 2026-08-09). nav_down -> the LOBBY, LOCKED during the Karen event
($karen1_night) AND at night 18:00-06:00 (visible-but-dim + in-fiction refusal, the Akigawa pattern).
★ THE POST-SEX SCHEDULE (author 2026-08-09): CL2.karen1.showerPhase — Phase A she's in the bathroom
shower (Scene 2 there); Phase B she's on the bed edge here (karen_icon_2 -> Scene 3). The sleep icon
ends the night in either phase. nav_left x7/y35 -> the bathroom. Figure coords are MY read. */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<<run (window.CL2 && CL2.karen1) ? CL2.karen1.showerStamp() : ''>>\
<<set _ph to (window.CL2 && CL2.karen1) ? CL2.karen1.showerPhase(State.variables) : ''>>\
<<set _mp to (window.CL2 && CL2.karen1) ? CL2.karen1.mornPhase(State.variables) : ''>>\
<<set _k4Today to ($karen4_done is ($day or 1))>>\
<<set _kn to !!$karen1_night>>\
<<set _doorLock to (_kn or _night)>>\
<div class="loc-prose loc-prose--above"><<if _mp is 'A'>>I surface at half six with no idea whose ceiling this is, and then I know, and the knowing arrives all at once. The shower is running. Her suit is over the chair-back where she folded it, and my phone is face-down on the desk exactly where I left it so it couldn't look at me.<<elseif _mp is 'B' and _k4Today>>She left first, because of course she did — blazer straight, bag over the shoulder, the door shut behind her like the end of a meeting. The room is just a room again: two beds, one of them never slept in, and a folded towel where I don't remember putting it. My tie is a mess and I have forty minutes.<<elseif _mp is 'B'>>She's out, hair damp, robe belted, sitting on the end of the far bed with her suit laid out beside her and no apparent intention of hurrying into it. Whatever we were at two in the morning, in about an hour that woman is a colleague of mine who'll be at a desk two floors down. Neither of us has said a word about the clock.<<elseif _ph is 'A'>>The shower's running behind the bathroom door — Karen, washing the izakaya and the last four years off her skin, taking her time about it. My clothes are somewhere on this floor and the bed is enormous and, for the length of a hotel water heater, entirely mine.<<elseif _ph is 'B'>>Karen's out — hair dark and wet down the back of a white hotel robe, sitting on the edge of the near bed with one leg crossed over the other like she's waiting for a meeting to start. She watches me and says nothing, which from her is the loudest thing in the room.<<elseif _kn>>The lamp's still on and the room still smells of both of us. Somewhere across the river a kitchen light I'm not thinking about.<<else>>A business-hotel twin, small and exact — two beds made to a standard nobody sleeps up to, rust drapes against the city, a desk lamp burning amber. The kind of room that never remembers anyone.<</if>></div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/chiyoda/hotel/' + (_night ? 'chiyoda_hotel_room_n.jpg' : 'chiyoda_hotel_room.jpg')" alt="">
<span @class="'hotspot hotspot--icon' + (_doorLock ? ' hotspot--locked' : '')" style="left:50%;top:93%;width:6%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Down to the lobby"><span class="hot-label">Down to the lobby</span>'>><<if $karen1_night>><<run CL2.toast('Not tonight', 'The corridor can wait. Nothing out there is better than what’s in here.', { sound: false })>><<elseif $min gte 1080 or $min lt 360>><<run CL2.toast('After hours', 'The lobby runs a skeleton desk after dark — whatever you need down there keeps until morning.', { sound: false })>><<else>><<goto "Hotel Chiyoda Lobby">><</if>><</link>></span>
<<if _ph is 'B' and not _mp>>\
<span class="hotspot hotspot--figure" style="left:55%;top:79%;height:38%"><<link '<img src="img/corpo_icon/karen_icon_2.png" alt="Karen, on the edge of the bed"><span class="hot-label">Karen — on the edge of the bed</span>' "Karen Sex Scene 3">><</link>></span>
<</if>>\
<<if _mp is 'B' and not _k4Today>>\
/* ★ she is out of the bathroom, still in the robe — SET DRESSING, not an interaction (author
2026-08-09: "keep Karen's icon there but not clickable"). The morning's one action is the
cupboard below. `is-static` keeps the anchoring and scale and kills the pointer + hover.
She leaves the frame with the cupboard once the work morning has played ($karen4_done): by then
they are both dressed and out of the room in fiction, so the robe sprite would contradict it. */
<span class="hotspot hotspot--figure is-static" style="left:55%;top:79%;height:38%"><img src="img/corpo_icon/karen_icon_2.png" alt="Karen, out of the bathroom"></span>
/* ★ THE CUPBOARD (author 2026-08-09): change_outfit_icon on the wardrobe -> Karen Sex Scene 4, the
work morning. Available while she is up and dressed and neither of them has left yet; it retires
once the scene has played ($karen4_done). Coords are MY read of the wardrobe, repositionable. */
<<if not _k4Today>>\
<span class="hotspot hotspot--icon" style="left:39%;top:40%;width:4%"><<link '<img src="img/corpo_icon/change_outfit_icon.png" alt="Get dressed for work"><span class="hot-label">Get dressed for work</span>' "Karen Sex Scene 4">><</link>></span>
<</if>>\
<</if>>\
/* ★ NO SLEEP ICON HERE (author 2026-08-09): the night ends through KAREN, not through the bed.
Scene 3 (the bathrobe, Phase B) is the only route to sleep - its aftermath continues straight into
the night beat. Phase A always has a way forward (the bathroom), so removing this strands nobody. */
<span class="hotspot hotspot--icon" style="left:7%;top:35%;width:6%"><<link '<img src="img/corpo_icon/nav_left.png" alt="The bathroom"><span class="hot-label">The bathroom</span>' "Hotel Chiyoda Bathroom">><</link>></span>
</div>/* chiyoda_hotel_shower.jpg — the black-mosaic wet-room (= the karen_2 dossier venue; ruling ④ resolved
2026-08-09: scene 2 is the shower HERE, same night). Phase A: karen_icon_1 at the shower (left wall)
-> Karen Sex Scene 2. After 20 min the icon is gone. Figure coords are MY read, repositionable. */
<<hud>>\
<<set _ph to (window.CL2 && CL2.karen1) ? CL2.karen1.showerPhase(State.variables) : ''>>\
<<set _mp to (window.CL2 && CL2.karen1) ? CL2.karen1.mornPhase(State.variables) : ''>>\
<<set _her to (_ph is 'A' or _mp is 'A')>>\
<<set _goto to (_mp is 'A') ? "Karen Morning Shower" : "Karen Sex Scene 2">>\
<div class="loc-prose loc-prose--above"><<if _mp is 'A'>>She is in there with the door pulled to and not shut, which in this woman is not an oversight. Steam is coming over the top of it. Half past six, a workday, and she is washing last night off in no particular hurry at all.<<elseif _ph is 'A'>>Steam, and the hiss of the rail shower off the black tile. Karen's under it with her back half to the door, unhurried, entirely aware the door isn't locked.<<else>>A wet-room in black mosaic and low gold light — the rail shower still dripping, a towel gone from the rail, the mirror only now clearing. The kind of bathroom that costs more than the bed.<</if>></div>\
<div class="loc-scene loc-scene--big">
<img src="img/place/chiyoda/hotel/chiyoda_hotel_shower.jpg" alt="">
<<if _her>>\
<<set _kHTML to '<img src="img/corpo_icon/karen_icon_1.png" alt="Karen, in the shower"><span class="hot-label">Karen — in the shower</span>'>>\
<span class="hotspot hotspot--figure" style="left:20%;top:83%;height:63%"><<link _kHTML _goto>><</link>></span>
<</if>>\
<span class="hotspot hotspot--icon" style="left:93%;top:50%;width:6%"><<link '<img src="img/corpo_icon/nav_right.png" alt="Back to the room"><span class="hot-label">Back to the room</span>' "Hotel Chiyoda Room">><</link>></span>
</div>/* ★ THE MORNING SHOWER (author 2026-08-09): same scene-2 data, but joining her ENDS her shower —
"she will finish after you fuck her". The finish latches on the way OUT (Karen Morning Shower Done),
never on entry, so backing out of the scene can't retire her. */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data: window.CL2_KAREN2_SEX, leaveTo: 'Karen Morning Shower Done', recapReturn: 'Karen Morning Shower Done', skipTired: true })>><</timed>>/* she is finished in there; hand back to the bathroom, which now shows the empty wet-room. */
<<run CL2.karen1.mornFinish()>>\
<<goto "Hotel Chiyoda Bathroom">>/* ★ THE WORK MORNING (build_4_karen_4, 42 clips; author GO 2026-08-09). Reached from the wardrobe's
change_outfit_icon once she is up and dressed. Built to the KAREN-FLOW STANDARD (skill §0). Exits to
the room; $karen4_done retires the icon so the morning can only run once. */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data: window.CL2_KAREN4_SEX, leaveTo: 'Karen Sex Scene 4 Done', recapReturn: 'Hotel Chiyoda Room', skipTired: true })>><</timed>>/* the morning is spent - latch (guarded, refresh-safe) and hand back to the room. */
<<run (function(){ var v = State.variables; if (v.karen4_done !== (v.day || 1)) v.karen4_done = v.day || 1; }())>>\
/* ★ DAY-SCOPED since the repeat nights shipped (2026-08-10): the stamp is TODAY, not forever —
each repeat morning offers the work morning again, and "she left first" only claims a morning
the scene actually happened. First-run journal test (!!karen4_done) stays truthy. */
<<goto "Hotel Chiyoda Room">>/* ★ THE SHOWER (build_4_karen_2, 60 clips; author GO 2026-08-09). Reached from the bathroom's
karen_icon_1 during schedule Phase A. Exits back to the bathroom — the aftermath ends in the
room, still under the water — and the time it costs pushes the schedule into Phase B, which is
what moves her to the bed edge. STANDALONE launcher => recapReturn required; the .cv skeleton
must exist before start() runs (CL2.sex reuses a stage, it never builds one). */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data: window.CL2_KAREN2_SEX, leaveTo: 'Hotel Chiyoda Bathroom', recapReturn: 'Hotel Chiyoda Bathroom', skipTired: true })>><</timed>>/* ★ ROBES -> BED (build_4_karen_3, 83 clips; author GO 2026-08-09). Reached from the bedroom's
karen_icon_2 during schedule Phase B. Exits to the room, where the sleep icon ends the night. */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data: window.CL2_KAREN3_SEX, leaveTo: 'Karen Night Sleep', recapReturn: 'Hotel Chiyoda Room', skipTired: true })>><</timed>>
/* ⚠ leaveTo = the sleep beat, NOT the room (author 2026-08-09: scene 3 is the only way to sleep, and
its aftermath can only continue into the night). recapReturn stays the room - that path is the
"already did this today" bounce, not the end of the scene. *//* entertainment_district_1.jpg (+_n) — the entertainment street off the plaza (author art 2026-08-07;
AUTHOR SPEC 2026-08-08: reached by the plaza nav_left at x7/y70, the mirror of the financial-district
door). Signage anchors (the FIT-24 gym, the karaoke/izakaya stacks, the darts bar, the 癒し処
relaxation parlour) UNWIRED pending the author — EXCEPT Hotel Chiyoda: AUTHOR SPEC 2026-08-08,
hotel_icon at x50/y30 (the hotel doors mid-frame) -> the lobby. The back-to-plaza exit is glue
(without it the street soft-locks) — AUTHOR SPEC 2026-08-08: nav_down at x50/y93 (bottom-centre). */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">One street off the plaza and the granite stops — izakaya stacked on karaoke stacked on a darts bar, a gym that never closes, and Hotel Chiyoda holding the middle of it with a straight face. The financial district doesn't come down here.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/chiyoda/' + (_night ? 'entertainment_district_1_n.jpg' : 'entertainment_district_1.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:50%;top:30%;width:5%"><<link '<img src="img/corpo_icon/hotel_icon.png" alt="Hotel Chiyoda"><span class="hot-label">Hotel Chiyoda</span>' "Hotel Chiyoda Lobby">><</link>></span>
<span class="hotspot hotspot--icon" style="left:50%;top:93%;width:5%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back to the plaza"><span class="hot-label">Back to the plaza</span>' "Marunouchi Plaza">><</link>></span>
</div>/* chiyoda_hotel_lobby.jpg (+_n, place/chiyoda/hotel/) — Hotel Chiyoda's front desk (author art
2026-08-08; AUTHOR SPEC same day: the street's hotel_icon at x50/y30 leads here). Look-around beat —
the art's anchors (the FRONT DESK check-in, the brass ELEVATORS right, the ICE/vending nook) are
UNWIRED pending the author, as are the delivered chiyoda_hotel_room (+_n) and chiyoda_hotel_shower
art (no flow specced yet). The back-to-the-street nav_down is MY addition (soft-lock glue; the glass
street door sits far-left in frame if a nav_left placement reads better). */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">Hotel Chiyoda — brass elevators, a carpet the colour of old vermillion, and a front desk polished twice a day whether it needs it or not. A business hotel one street off the plaza, the kind that fills up with people who have an early meeting. The clerk doesn't ask what brings me in.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/chiyoda/hotel/' + (_night ? 'chiyoda_hotel_lobby_n.jpg' : 'chiyoda_hotel_lobby.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:50%;top:93%;width:5%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back to the street"><span class="hot-label">Back to the street</span>' "Entertainment District">><</link>></span>
</div>/* mub_facade.jpg — the blue-glass HQ on the Nihonbashi riverside (LOCKED flavor ruling 2026-07-07:
artistic license accepted; the tower fronts the water). USER SPEC: nav_right = the entry -> the lobby.
The back nav_left is MY addition. */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">Mitsuba United Bank. The trefoil monogram sits on the glass ten storeys up, green flags running along the riverside promenade. Everyone going in through the revolving doors has a lanyard and somewhere to be. I'm on the pavement with neither.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/chiyoda/mub_bank/' + (_night ? 'mub_facade_n.jpg' : 'mub_facade.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:63%;top:76%;width:6%"><<link '<img src="img/corpo_icon/mub_icon.png" alt="Through the doors"><span class="hot-label">Through the doors</span>' "MUB Lobby">><</link>></span>
<span class="hotspot hotspot--icon" style="left:50%;top:94%;width:5%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back to the district"><span class="hot-label">Back to the district</span>' "Financial District">><</link>></span>
</div>/* mub_lobby.jpg — the marble grand lobby. USER SPEC: a small-medium nav_left just below the baked-in
"HQ ELEVATOR HALL" signage -> the elevator. The Banking Hall portal (right, in the art) = the future
retail-banking seam — deliberately un-wired for now. The exit nav_down is MY addition. */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">Marble and brass, and nobody raising their voice. The trefoil looks down from the feature wall while the receptionists triage the suits — Banking Hall on the right, the HQ elevators on the left, and nobody asking me which way I'm meant to go.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/chiyoda/mub_bank/' + (_night ? 'mub_lobby_n.jpg' : 'mub_lobby.jpg')" alt="">
<<set _introOK to (window.CL2 && CL2.bank && CL2.bank.introDone) ? CL2.bank.introDone(State.variables) : true>>\
<<if $mub_dead>>\
<span class="hotspot hotspot--icon hotspot--locked" style="left:24%;top:52%;width:5%"><<link '<img src="img/corpo_icon/mub_icon.png" alt="No access"><span class="hot-label">HQ elevator hall</span>'>><<run CL2.toast('The badge reader stays dark', 'The doors don’t argue. Whatever was waiting on the seventh floor stopped waiting at noon.', { sound: false })>><</link>></span>
<<elseif $mub_offer and not $mub_arrived and not _introOK and CL2.office.beforeWindow(State.variables)>>\
<span class="hotspot hotspot--icon hotspot--locked" style="left:24%;top:52%;width:5%"><<link '<img src="img/corpo_icon/mub_icon.png" alt="Not yet"><span class="hot-label">HQ elevator hall</span>'>><<run CL2.toast('Reception says no', '“Monday, 09:00 — the letter was specific. Your badge wakes with the appointment.”', { sound: false })>><</link>></span>
<<else>>\
<span class="hotspot hotspot--icon" style="left:24%;top:52%;width:5%"><<link '<img src="img/corpo_icon/mub_icon.png" alt="The HQ elevator hall"><span class="hot-label">HQ elevator hall</span>' "MUB Elevator">><</link>></span>
<</if>>\
/* ★ THE WORKDAY EXIT LOCK (author 2026-07-08; extended 2026-07-10 to the FIRST-DAY intro chain — author:
"at the MC introduction to MUB bank event, make sure player can't leave MUB building before 5PM"): staff
(introDone) OR a first-day arrival mid-chain ($mub_arrived, not dead) can't leave on a WEEKDAY until
17:00. Weekends + pre-arrival visitors + 17:00 onward = free. One truth: CL2.mubOnClock (03-script) —
the same gate the quick-nav chips + RSB store card obey. 1020 min = 17:00. */
<<set _exitLock to (window.CL2 && CL2.mubOnClock) ? CL2.mubOnClock(State.variables, 'MUB Lobby') : false>>\
<<if _exitLock>>\
<span class="hotspot hotspot--icon hotspot--locked" style="left:50%;top:94%;width:6%"><<link '<img src="img/corpo_icon/nav_down.png" alt="On the clock until five"><span class="hot-label">Back outside</span>'>><<run CL2.mubClockToast(State.variables)>><</link>></span>
<<else>>\
<span class="hotspot hotspot--icon" style="left:50%;top:94%;width:6%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back outside"><span class="hot-label">Back outside</span>' "MUB Tower">><</link>></span>
<</if>>\
</div>/* mub_elevator.jpg (interior, time-neutral) + the FLOATING FLOOR PANEL (user spec: vertical ~2:5, ~1/5 of
the imagemap width, beside the cab). Only 7F (Budget & Planning — its floor art exists) and 1F (back to
the lobby) answer; every other floor = a no-access toast until its content is built. */
<<hud>>\
<div class="loc-prose loc-prose--above">Bronze, walnut, and the cables working somewhere behind the wall. The panel lists eight floors of a bank I don't belong to yet.</div>\
<div class="loc-scene loc-scene--big">
<img src="img/place/chiyoda/mub_bank/mub_elevator.jpg" alt="">
<div class="mubel">
<div class="mubel-head"><b>MUB</b><span>ELEVATOR</span></div>
<a class="mubel-f" role="button" data-mub-floor="8"><i>8</i><span>Executive Floor · C‑Suite</span></a>
<<if $mub_offer and not $mub_dead>>\
<a class="mubel-f mubel-f--open" role="button" data-mub-floor="7"><i>7</i><span>Finance · Budget & Planning</span></a>
<<else>>\
<a class="mubel-f" role="button" data-mub-floor="7"><i>7</i><span>Finance · Budget & Planning</span></a>
<</if>>\
<a class="mubel-f" role="button" data-mub-floor="6"><i>6</i><span>Finance · Treasury & Accounting</span></a>
<a class="mubel-f" role="button" data-mub-floor="5"><i>5</i><span>Corporate & Business Banking</span></a>
<a class="mubel-f" role="button" data-mub-floor="4"><i>4</i><span>Global Markets · Trading</span></a>
<a class="mubel-f" role="button" data-mub-floor="3"><i>3</i><span>Risk · Audit · Regulatory Affairs</span></a>
<a class="mubel-f" role="button" data-mub-floor="2"><i>2</i><span>Human Capital</span></a>
<a class="mubel-f mubel-f--open" role="button" data-mub-floor="1"><i>1</i><span>Lobby · Retail Banking</span></a>
</div>
</div>/* mub_finance_budget_lobby.jpg — the green-marble Budget & Planning floor (Nagi's sub-directorate).
Reachable only once $mub_offer unlocked 7F. ⚠ VISUAL READ (defer to author): the two glass doors are
UNLABELED in the art — I assigned LEFT = Forecasting & Analytics (the MC's future division).
★ AUTHOR RULING 2026-08-07: the RIGHT door = the meeting-room hallway; Capital Adequacy &
Prudential is reached THROUGH it (nav_left inside the Meeting Lobby), no longer straight off
the floor. */
<<hud>>\
<<set $mub_visited_f7 to true>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">Green marble, gold trim, and the trefoil again — smaller up here than it was in the lobby, set into the wall at about eye level. Two glass doors, two teams, and a floor that runs on forecasts and capital ratios.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/chiyoda/mub_bank/' + (_night ? 'mub_finance_budget_lobby_n.jpg' : 'mub_finance_budget_lobby.jpg')" alt="">
<<set _introOK to (window.CL2 && CL2.bank && CL2.bank.introDone) ? CL2.bank.introDone(State.variables) : true>>\
/* ★ THE FIRST-DAY FUNNEL (author spec 2026-07-08): until the office chain completes, the floor shows
ONLY the EVP door — then Akari's door at chain 2, the bullpen at chain 3, everything at intro-done.
The elevator exit NEVER hides (soft-lock glue). */
<<if _introOK or $mub_chain gte 3>>\
<span class="hotspot hotspot--icon" style="left:8%;top:52%;width:6%"><<link '<img src="img/corpo_icon/nav_left.png" alt="Forecasting & Analytics"><span class="hot-label">Forecasting & Analytics</span>' "MUB Forecasting Division">><</link>></span>
<</if>>\
<<if _introOK>>\
<span class="hotspot hotspot--icon" style="left:90%;top:52%;width:6%"><<link '<img src="img/corpo_icon/nav_right.png" alt="The meeting-room hallway"><span class="hot-label">The meeting-room hallway</span>' "MUB Meeting Lobby">><</link>></span>
<span class="hotspot hotspot--icon" style="left:75%;top:65%;width:6%"><<link '<img src="img/corpo_icon/mub_capital_icon.png" alt="Capital Adequacy & Prudential division head's office"><span class="hot-label">Capital Adequacy & Prudential — division head's office</span>' "MUB Capital Head Office">><</link>></span>
<span class="hotspot hotspot--icon" style="left:95%;top:94%;width:5%"><<link '<img src="img/corpo_icon/nav_right_down.png" alt="The meeting-room corridor"><span class="hot-label">Meeting rooms</span>' "MUB Meeting Lobby">><</link>></span>
<</if>>\
<<if _introOK or $mub_chain gte 2>>\
<span class="hotspot hotspot--icon" style="left:25%;top:65%;width:6%"><<link '<img src="img/corpo_icon/mub_forecast_icon.png" alt="Forecasting & Analytics division head's office"><span class="hot-label">Forecasting & Analytics — division head's office</span>' "MUB Forecast Head Office">><</link>></span>
<</if>>\
<span class="hotspot hotspot--icon" style="left:5%;top:90%;width:5%"><<link '<img src="img/corpo_icon/mub_executive_icon.png" alt="The EVP's corner office"><span class="hot-label">The EVP's office</span>' "MUB EVP Office">><</link>></span>
<span class="hotspot hotspot--icon" style="left:50%;top:94%;width:5%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back to the elevator"><span class="hot-label">Elevator</span>' "MUB Elevator">><</link>></span>
</div>/* mub_finance_budget_forecast.jpg — Forecasting & Analytics (予測分析部): the MC's division.
★ OFFICE EVENTS CHAIN (author spec 2026-07-08): during the chain the COCKPIT ICON IS HIDDEN — the
floor shows only Nene and Rino (icons reference-placed: Nene = the grey blazer LEFT row, Rino = the
white blouse RIGHT row — MY visual read, swap if wrong). Both introductions (either order) complete
the chain -> $mub_intro_done -> the desk appears. Post-chain the two stay as repeatable desk chats
on weekday hours (CL2.office.deskGo). CL2.bank.introDone() grandfathers old saves. */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<<set _intro to (window.CL2 && CL2.bank && CL2.bank.introDone) ? CL2.bank.introDone(State.variables) : true>>\
<<set _ngo to (window.CL2 && CL2.office) ? CL2.office.deskGo(State.variables, 'nene') : "">>\
<<set _rgo to (window.CL2 && CL2.office) ? CL2.office.deskGo(State.variables, 'rino') : "">>\
<div class="loc-prose loc-prose--above"><<if $mub_rank gte 1>>Forecasting & Analytics. Twin monitors, model printouts, a whiteboard dense with someone's regression war. Your desk is the third one in — the one with your initials on this month's pack.<<elseif _intro and _rgo>>Forecasting & Analytics. Twin monitors, model printouts, and one bare desk by the window with a probation badge on the chair. Rino nods at it without looking up. <i>“Nine sharp. The pack won't tie itself.”</i><<elseif _intro>>Forecasting & Analytics after hours — the monitors dark, the whiteboard's regression war left where somebody stopped arguing, and one bare desk by the window with a probation badge under the security lights. There's nobody here to tell me whether I'm allowed to sit at it.<<elseif $mub_chain gte 3>>The shared office. Two heads look up at exactly opposite speeds — the grey blazer on the left takes one glance and files me under later; the one by the window is already halfway out of her chair. The Division Head said two names: Nene, Rino.<<elseif $mub_offer>>Forecasting & Analytics. Twin monitors, model printouts, and one bare desk by the window that nobody has offered me yet. It hums even when nobody's talking.<<else>>Forecasting & Analytics. Twin monitors, model printouts, a whiteboard dense with someone's regression war. It hums even when nobody's talking, and none of it is mine to touch, not this month anyway.<</if>></div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/chiyoda/mub_bank/' + (_night ? 'mub_finance_budget_forecast_n.jpg' : 'mub_finance_budget_forecast.jpg')" alt="">
<<if _intro>>\
<span class="hotspot hotspot--icon" style="left:33%;top:50%;width:5%"><<link '<img src="img/corpo_icon/work_icon.png" alt="Sit at your desk"><span class="hot-label"><<if $mub_rank gte 1>>Your desk — MUB One<<else>>The probation desk — the pack<</if>></span>' "MUB Portal">><</link>></span>
<</if>>\
<<if _ngo>>\
<span class="hotspot hotspot--icon" style="left:15.5%;top:76%;width:27%"><<link '<img src="img/corpo_icon/nene_icon_1.png" alt="Nene"><span class="hot-label"><<if $mub_met_nene or _intro>>Nene<<else>>Introduce yourself — Nene<</if>></span>' _ngo>><</link>></span>
<</if>>\
<<if _rgo>>\
<span class="hotspot hotspot--icon" style="left:79.5%;top:72%;width:23%"><<link '<img src="img/corpo_icon/rino_icon_1.png" alt="Rino"><span class="hot-label"><<if $mub_met_rino or _intro>>Rino<<else>>Introduce yourself — Rino<</if>></span>' _rgo>><</link>></span>
<</if>>\
<span class="hotspot hotspot--icon" style="left:50%;top:94%;width:5%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back to the floor lobby"><span class="hot-label">Back to the floor</span>' "MUB Budget Planning Floor">><</link>></span>
</div>/* mub_finance_budget_capital.jpg — Capital Adequacy & Prudential Reporting (自己資本・規制報告部).
Look-around beat only for now. ★ AUTHOR SPEC 2026-08-07: the room hangs off the meeting-room
hallway — nav_down exits BACK THERE (not the floor), and nav_right (x93/y45, the right glass
door) leads to the medium meeting room.
★ AUTHOR 2026-08-09: once the hotel event is done ($karen1_done), KAREN sits here —
karen_icon_3 reference-placed from his composite (left desk row, hands at the keyboard): x33/y77 h39.
★ AUTHOR 2026-08-10: clickable — the desk chat (Karen Office Chat). Her hours are the OFFICE
SCHEDULE (CL2.karenOffice, 52-karen-night): weekdays 09:00->19:30, until 22:00 on ~3 random
late days a week; the scene-5 ask gates inside the chat (after 19:00 + depravity). */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<<set _kHere to (window.CL2 and CL2.karenOffice) ? CL2.karenOffice.here(State.variables) : false>>\
<div class="loc-prose loc-prose--above">Capital Adequacy & Prudential Reporting. Binders with regulator-grade spines, a wall clock set five minutes fast on purpose. This is the room where the bank writes down, every week, the reasons it should be allowed to keep operating.<<if _kHere>> Karen has a desk here now — left row, screen-side, typing like the night at the Chiyoda is a file she already closed. She doesn't look up. She knows I'm here anyway.<</if>></div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/chiyoda/mub_bank/' + (_night ? 'mub_finance_budget_capital_n.png' : 'mub_finance_budget_capital.jpg')" alt="">
<<if _kHere>>\
<span class="hotspot hotspot--figure" style="left:33%;top:77%;height:39%"><<link '<img src="img/corpo_icon/karen_icon_3.png" alt="Karen, at her desk"><span class="hot-label">Karen — at her desk</span>' "Karen Office Chat">><</link>></span>
<</if>>\
<span class="hotspot hotspot--icon" style="left:93%;top:45%;width:5%"><<link '<img src="img/corpo_icon/nav_right.png" alt="The medium meeting room"><span class="hot-label">Medium meeting room</span>' "MUB Medium Meeting Room">><</link>></span>
<span class="hotspot hotspot--icon" style="left:48%;top:94%;width:5%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back to the hallway"><span class="hot-label">Back to the hallway</span>' "MUB Meeting Lobby">><</link>></span>
</div>/* mub_finance_budget_forecast_div_head_room.jpg — the F&A division head's glass corner office.
★ OFFICE EVENTS CHAIN (author spec 2026-07-08 — ratifies the bible §5.1a cast; supersedes the
same-day prose intro): Akari Tsumugi (senior VP, Division Head) appears as an ICON at her chair
(akari_icon_1, reference-placed) — CL2.office.akariGo() routes: chain 2 = her two intro beats
(45-office-events cutscenes, given-first law taught there) -> chain 3; post-chain = the repeatable
supervisor chat on weekday hours. Empty office otherwise. */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<<set _intro to (window.CL2 && CL2.bank && CL2.bank.introDone) ? CL2.bank.introDone(State.variables) : true>>\
<<set _ago to (window.CL2 && CL2.office) ? CL2.office.akariGo(State.variables) : "">>\
<div class="loc-prose loc-prose--above">The division head's office — glass on two sides, the bullpen's noise coming through it as a low hum. A desk with nothing loose on it, twin monitors angled just so, and a window that looks out over every desk on the floor.<<if _ago>> The nameplate reads TSUMUGI AKARI — 予測分析部長 Division Head — and she's at her desk, already reading me like a pack.<<elseif _intro>> The nameplate reads TSUMUGI AKARI — 予測分析部長 Division Head. The chair is empty; division heads live in meetings.<</if>></div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/chiyoda/mub_bank/' + (_night ? 'mub_finance_budget_forecast_div_head_room_n.jpg' : 'mub_finance_budget_forecast_div_head_room.jpg')" alt="">
<<if _ago>>\
<span class="hotspot hotspot--icon" style="left:52%;top:53%;width:9%"><<link '<img src="img/corpo_icon/akari_icon_1.png" alt="Akari"><span class="hot-label">Akari</span>' _ago>><</link>></span>
<</if>>\
<span class="hotspot hotspot--icon" style="left:48%;top:94%;width:5%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back"><span class="hot-label">Back</span>' "MUB Budget Planning Floor">><</link>></span>
</div>/* mub_finance_budget_capital_div_head_room.jpg — the Capital Adequacy division head's office. */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">The Capital head's office. Regulation binders lined up spine-out by quarter, a single framed certificate, a plant on the cabinet, and a chair that has clearly never been leaned back in.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/chiyoda/mub_bank/' + (_night ? 'mub_finance_budget_capital_div_head_room_n.jpg' : 'mub_finance_budget_capital_div_head_room.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:48%;top:94%;width:5%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back"><span class="hot-label">Back</span>' "MUB Budget Planning Floor">><</link>></span>
</div>/* mub_budget_planning_evp_room.jpg (+_n) — the Sub-Directorate head's (EVP) office. ★ OFFICE EVENTS
CHAIN (author spec 2026-07-08, supersedes the same-day prose scene): Nagi appears as an ICON at her
chair (nagi_icon_1; reference-placed) — clicking her routes by CL2.office.nagiGo(): the one-shot
First Meeting (window Mon 09–12; entry latches "showed up") -> the reunion conv -> the interview,
and post-chain the repeatable office chat (weekdays 09–18). Empty office otherwise. */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<<set _ngo to (window.CL2 && CL2.office) ? CL2.office.nagiGo(State.variables) : "">>\
<div class="loc-prose loc-prose--above">The corner office of the whole Sub-Directorate. 執行役員 Executive Officer on the nameplate, fresh lilies on the sill. <<if _ngo>>She's at the window with the city behind her — the whole floor runs from that exact spot.<<else>>Whoever runs this floor runs it from here; right now the chair is empty.<</if>></div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/chiyoda/mub_bank/' + (_night ? 'mub_budget_planning_evp_room_n.jpg' : 'mub_budget_planning_evp_room.jpg')" alt="">
<<if _ngo>>\
<span class="hotspot hotspot--icon" style="left:55%;top:49.5%;width:8%"><<link '<img src="img/corpo_icon/nagi_icon_1.png" alt="Nagi"><span class="hot-label">Nagi</span>' _ngo>><</link>></span>
<</if>>\
<span class="hotspot hotspot--icon" style="left:48%;top:88%;width:6%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back to the floor lobby"><span class="hot-label">Back to the floor</span>' "MUB Budget Planning Floor">><</link>></span>
</div>/* mub_meeting_lobby.jpg (+_n) — the meeting-room corridor off the Budget & Planning floor (author-specced
cluster 2026-07-08). Two glass bays: LEFT (nav_left, x60/y35) = the MEDIUM room, RIGHT (nav_right, x70/y35)
= the SMALL room. ⚠ VISUAL READ (defer to author): door-size assignment left/right is MINE — swap if the
art reads the other way. The nav_down back to the floor is MY addition (without it the corridor soft-locks —
same glue as the head offices). A `mub_large_meeting_room` art also exists, UNWIRED pending the author.
★ AUTHOR SPEC 2026-08-07: nav_left at x25/y50 -> the Capital Adequacy & Prudential office room — the
corridor is now the ONLY route in (7F's nav_right re-pointed here the same day). */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">The meeting-room corridor — glass bays off a stretch of grey carpet, one room built for four people and one for a dozen. Whatever gets decided about this floor's numbers gets decided along here.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/chiyoda/mub_bank/' + (_night ? 'mub_meeting_lobby_n.jpg' : 'mub_meeting_lobby.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:25%;top:50%;width:5%"><<link '<img src="img/corpo_icon/nav_left.png" alt="Capital Adequacy & Prudential"><span class="hot-label">Capital Adequacy & Prudential Reporting</span>' "MUB Capital Division">><</link>></span>
/* ★ 0.04 PIECE 1 (author 2026-08-08): the Suzuran trio's after-hours hangout — 主任 landed · weekday ·
17:00–18:00 (CL2.suzuran.hangoutGo -> the topic conv; time charges INSIDE it via moveCost, so the
click itself is free). Figure group at x50/y60 w55 — AUTHOR-SPECCED 2026-08-09 (supersedes my x62/y57 read). */
<<set _kgo to (window.CL2 && CL2.suzuran) ? CL2.suzuran.hangoutGo(State.variables) : "">>\
<<if _kgo>>\
<span class="hotspot hotspot--icon" style="left:50%;top:60%;width:55%;z-index:5"><<link '<img src="img/corpo_icon/karen_icon_0.png" alt="Voices I know"><span class="hot-label">Voices I know</span>' _kgo>><</link>></span>
<</if>>\
<span class="hotspot hotspot--icon" style="left:47%;top:35%;width:5%"><<link '<img src="img/corpo_icon/nav_left.png" alt="The medium meeting room"><span class="hot-label">Medium meeting room</span>' "MUB Medium Meeting Room">><</link>></span>
<span class="hotspot hotspot--icon" style="left:58%;top:35%;width:5%"><<link '<img src="img/corpo_icon/nav_right.png" alt="The small meeting room"><span class="hot-label">Small meeting room</span>' "MUB Small Meeting Room">><</link>></span>
<span class="hotspot hotspot--icon" style="left:50%;top:94%;width:5%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back to the floor"><span class="hot-label">Back to the floor</span>' "MUB Budget Planning Floor">><</link>></span>
</div>/* mub_medium_meeting_room.jpg (+_n) — the medium meeting room off the corridor. Look-around beat; the table
fills with the bank track (budget reviews, the Gauntlet's smaller sessions).
★ AUTHOR SPEC 2026-08-07: the LEFT door (nav_left x5/y50) = the Capital Adequacy office (two-way with
its x93/y45 door); the RIGHT mirror (nav_right x95/y50) = back to the meeting-room hallway. */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">The medium room — a long table for a dozen, a wall screen still glowing with someone's half-erased forecast, water glasses squared to the millimetre. It seats a whole directorate, and from the head of the table you can read every face down it.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/chiyoda/mub_bank/' + (_night ? 'mub_medium_meeting_room_n.jpg' : 'mub_medium_meeting_room.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:5%;top:50%;width:5%"><<link '<img src="img/corpo_icon/nav_left.png" alt="The Capital Adequacy office"><span class="hot-label">The Capital Adequacy office</span>' "MUB Capital Division">><</link>></span>
<span class="hotspot hotspot--icon" style="left:95%;top:50%;width:5%"><<link '<img src="img/corpo_icon/nav_right.png" alt="Back to the hallway"><span class="hot-label">Back to the hallway</span>' "MUB Meeting Lobby">><</link>></span>
</div>/* mub_small_meeting_room.jpg (+_n) — the small meeting room off the corridor. Look-around beat; the closed
door where the quieter conversations live (one-on-ones, the private word before a decision).
★ AUTHOR SPEC 2026-08-07: the 昇格試験 hotspot lives HERE (moved from the Meeting Lobby — the sitting
always used this room's art), on the laptop, width 5%. Laptop coords x60/y66 = MY visual read of the
table — repositionable. */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">The small room — four chairs, one round table, a door that actually closes. The room you book when the conversation isn't for the floor to hear.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/chiyoda/mub_bank/' + (_night ? 'mub_small_meeting_room_n.jpg' : 'mub_small_meeting_room.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:80%;top:50%;width:5%"><<link '<img src="img/corpo_icon/nav_right.png" alt="Back to the corridor"><span class="hot-label">Back</span>' "MUB Meeting Lobby">><</link>></span>
/* ★ THE LADDER (2026-07-12; moved here 2026-08-07): the 昇格試験 hotspot — renders ONLY in the window week for a ready file (CL2.mubPromo.examAvail) */
<<set _pexAvail to (window.CL2 && CL2.mubPromo) ? CL2.mubPromo.examAvail(State.variables) : ''>>\
<<if _pexAvail>>\
<span class="hotspot hotspot--icon" style="left:60%;top:66%;width:5%"><<link '<img src="img/corpo_icon/work_icon.png" alt="昇格試験 — the promotion exam"><span class="hot-label">昇格試験 — the promotion exam</span>' "MUB Promo Exam">><</link>></span>
<</if>>\
</div><<hud>>\
<<run CL2.bank.enterRecon()>>\
<div class="loc-prose loc-prose--above"><<if (window.CL2 && CL2.bank && CL2.bank.introDone) ? CL2.bank.introDone(State.variables) : true>>The pack lands at nine sharp — eight lines, a plan column, an actual column, and somewhere in there, numbers that are lying. Rino's rule, delivered over the partition on day one: <i>“The month doesn't close because it's five o'clock. It closes because it ties.”</i><<else>>The floor hums through a close I'm not signed into. Nobody hands a pack to a face the Division Head hasn't seen.<</if>></div>\
<div id="mubr-host"></div>\
<<timed 40ms>><<run CL2.bank.renderRecon()>><</timed>>/* the after-nine grind loop (author 2026-07-08): the FIRST hour is charged by the result-card button's
click handler (CL2.bank.overtimeBegin), NOT here — this passage only RENDERS (refresh-safe; a bare
passage-entry side effect would double-charge on reload/history, the enterRecon trap). Keep working /
Drink a tonic / Back to the floor all fire from click handlers. Session persists in $ot. */
<<hud>>\
<div id="mubot-host"></div>\
<<timed 40ms>><<run CL2.bank.renderOvertime()>><</timed>><<hud>>
<<set _meal to CL2.eatMeal('breakfast')>><<if _meal>><<run CL2.toast("Breakfast with Remu", "A warm meal together — energy +" + _meal.energy + ", stress -" + _meal.stress + ", lust +" + _meal.lust + ".")>><</if>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_REMU_BREAKFAST_CONV, leaveTo : "Apartment Living Room" })>><</timed>><<hud>>\
<div class="loc-prose loc-prose--above">The division head's chair. The bullpen hums on the other side of the glass — your bullpen now — and the book on the screen is the reason the executives upstairs see anything at all.</div>\
<div id="mubc-host"></div>\
<<timed 40ms>><<run CL2.cockpit.render('avp', true)>><</timed>><<hud>>\
<div class="loc-prose loc-prose--above">Nagi's chair — or the one you took from her. Budget season. Outside the corner office, six directorate heads wait with next year's dreams in ring binders, and the red pen sits exactly where she always left it.</div>\
<div id="mubc-host"></div>\
<<timed 40ms>><<run CL2.cockpit.render('evp', true)>><</timed>><<hud>>\
<div class="loc-prose loc-prose--above">The 8th floor. Group Finance. Every number the outside world will ever see passes across this desk once, quietly, to be decided.</div>\
<div id="mubc-host"></div>\
<<timed 40ms>><<run CL2.cockpit.render('cfo', true)>><</timed>><<hud>>\
<div class="loc-prose loc-prose--above">頭取室. The whole bank below, the holding above, two lineages at the table, and five dials that decide whether the eighth bank in Japan becomes the seventh.</div>\
<div id="mubc-host"></div>\
<<timed 40ms>><<run CL2.cockpit.render('ceo', true)>><</timed>>/* ★ ONE-SHOT (the chain's ignition): entering = clicking Nagi = "showed up" — CL2.office.arrive()
latches $mub_arrived/$mub_met_nagi ON ENTRY (author ruling: her seeing your face stops the clock).
No loop: the clip freezes on its last frame. */
<<hud>>\
<<run CL2.office.arrive()>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline src="vid/build_2_nagi_0/nagi_first_meeting_no_loop.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"><p class="cv-narr"><<= CL2.mcTokens(CL2_OFFICE.nagiFirst.narr)>></p><<= CL2.office.msg('nagi_icon','Nagi', CL2_OFFICE.nagiFirst.line)>></div><div class="cv-meta"></div></div></div><div class="cv-menu"><a class="cv-choice cv-choice--go" data-passage="MUB Nagi Reunion">Close the door behind you.</a></div></div>/* the reunion conversation (CL2.conv; CL2_NAGI_INTRO_CONV, leaveCost 0) — its ONLY exit walks the
pair to the small meeting room: leaveTo = the interview. */
<<hud>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data: window.CL2_NAGI_INTRO_CONV, leaveTo: 'MUB Interview' })>><</timed>>/* S3 — the small meeting room, two candidates. No loop: freezes on the last frame. */
<<hud>>\
<<run CL2.office.chainAt(1)>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline src="vid/build_2_nagi_0/nagi_interview_1_start.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"><p class="cv-narr"><<= CL2.mcTokens(CL2_OFFICE.interview.opening_narr)>></p><p class="cv-narr"><i>The other candidate:</i> “<<= CL2.mcTokens(CL2_OFFICE.interview.rival_intro_line)>>”</p></div><div class="cv-meta"></div></div></div><div class="cv-menu"><a class="cv-choice cv-choice--go" data-passage="MUB Interview Session">Take the seat.</a></div></div>/* S4 — the 20-question minigame under the questioning loop. Phone hidden (03 PHONE_HIDDEN). */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline loop src="vid/build_2_nagi_0/nagi_interview_1_asking_questions.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"><p class="cv-narr">The folder opens on twenty tabs, and she asks them in the same tone she probably approves budgets in.</p></div><div class="cv-meta"></div></div></div></div>
<div id="miv-host"></div>
<<timed 40ms>><<run CL2.interview.start()>><</timed>>/* S5 — one-shot; freezes on the last frame; the score picks Nagi's speech tier (outcome never varies). */
<<hud>>\
<<set _sc to $mub_interview_score>>\
<<set _tier to _sc gte 16 ? "perfect" : (_sc gte 8 ? "good" : "rough")>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline src="vid/build_2_nagi_0/nagi_interview_2_accepting_mc.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"><p class="cv-narr">Score: <b><<= _sc>></b> / 20.</p><<= CL2.office.msg('nagi_icon','Nagi', CL2_OFFICE.interview.accept[_tier])>><p class="cv-narr"><i>The other candidate:</i> <<= CL2.mcTokens(CL2_OFFICE.interview.rival_exit_line)>></p></div><div class="cv-meta"></div></div></div><div class="cv-menu"><a class="cv-choice cv-choice--go" data-passage="MUB Budget Planning Floor">The seventh floor — the Division Head is expecting me.</a></div></div>/* Akari beat 1 (one-shot): she presents the MC. */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline src="vid/build_2_akari_0/akari_introducing_mc_to_the_team_1_no_loop.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"><p class="cv-narr"><<= CL2.mcTokens(CL2_OFFICE.akari.narr)>></p><<= CL2.office.msg('akari_icon','Akari', CL2_OFFICE.akari.beat1)>></div><div class="cv-meta"></div></div></div><div class="cv-menu"><a class="cv-choice cv-choice--go" data-passage="MUB Akari Intro 2">Stand straight — your turn.</a></div></div>/* Akari beat 2 (one-shot): the MC's jikoshoukai + her pointer to the bullpen. Completing sets chain 3. */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline src="vid/build_2_akari_0/akari_introducing_mc_to_the_team_2_no_loop.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"><<= CL2.office.msg('akari_icon','', CL2_OFFICE.akari.jiko, true)>><<= CL2.office.msg('akari_icon','Akari', CL2_OFFICE.akari.pointer)>></div><div class="cv-meta"></div></div></div><div class="cv-menu"><a class="cv-choice cv-choice--go" data-passage="MUB Budget Planning Floor" data-setter="$mub_chain to 3">To the shared office — Nene and Rino.</a></div></div>/* the REPEATABLE EVP-office visit (weekday hours) — work / guidance / life / the old days / flirt. */
<<hud>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data: window.CL2_NAGI_CHAT_CONV, leaveTo: 'MUB EVP Office' })>><</timed>>/* the REPEATABLE supervisor visit. */
<<hud>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data: window.CL2_AKARI_CHAT_CONV, leaveTo: 'MUB Forecast Head Office' })>><</timed>>/* first click = the cold introduction; afterwards the repeatable desk visit. meet() fires on entry —
the intro/repeat pick reads the PRE-entry flag. ★ review-caught: GRANDFATHERED saves (rank/packs —
introDone true without the chain flags) skip the intro entirely — a confirmed Officer never gets
"Introduce yourself" content; meet() just latches the flags silently. */
<<hud>>\
<<set _first to (not $mub_met_nene) and not ((window.CL2 && CL2.bank && CL2.bank.introDone) ? CL2.bank.introDone(State.variables) : false)>>\
<<run CL2.office.meet('nene')>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data: _first ? window.CL2_NENE_INTRO_CONV : window.CL2_NENE_CHAT_CONV, leaveTo: 'MUB Forecasting Division' })>><</timed>><<hud>>\
<<set _first to (not $mub_met_rino) and not ((window.CL2 && CL2.bank && CL2.bank.introDone) ? CL2.bank.introDone(State.variables) : false)>>\
<<run CL2.office.meet('rino')>>\
/* ★ the HOTPOT INVITE gate (49-rino-events, author 2026-07-11): 銀検 Grade 4 + probation passed + 17:00-18:00
+ no key yet + the weekly re-offer window. Computed fresh on every entry (condOK can't read arrays/derive).
★ + the DRINKS RE-INVITE gate (author 2026-07-12): after scene 1 ($rino_evt>=1), 16:00-18:00, once/day — and the conv's
ONE sex-seam is swapped per-entry (drinks SUPERSEDES the hotpot re-offer once he's been to her place; the else-branch
RESTORES the hotpot seam because the conv object is a mutated global — never remove the restore). */
<<run (function(){ var v = State.variables, m = (typeof v.min === 'number') ? v.min : 420;
var g4 = (v.bk_certs || []).indexOf('g4') >= 0;
var weekly = !v.rino_party_day || ((v.day || 1) >= v.rino_party_day + 7);
v.rino_party_gate = (g4 && (v.mub_rank || 0) >= 1 && m >= 1020 && m < 1080 && !v.rino_invited && weekly && !(v.dayFlags && v.dayFlags.rino_drinks)) ? 1 : 0; /* +2026-07-12: no hotpot invite the same evening he already drank at hers */
v.rino_drinks_gate = ((v.rino_evt || 0) >= 1 && m >= 960 && m < 1080 && !(v.dayFlags && v.dayFlags.rino_drinks)) ? 1 : 0;
/* ★ THE OFFICE TIER (author rulings 2026-07-12): affair ($rino_evt >= 2) + 係員 ($mub_rank >= 2) unlock the LUNCH
route (11:00-12:45, once/day, the 1F cafe) and the DESK route (her private ledger rates him depravity >= 51;
max 2/day as one MORNING slot < 12:00 + one AFTERNOON slot 13:00-18:00 — the lunch hour belongs to the lunch route). */
var ok2 = (v.rino_evt || 0) >= 2 && (v.mub_rank || 0) >= 2 && !v.mub_dead;
v.rino_lunch_gate = (ok2 && m >= 660 && m < 765 && !(v.dayFlags && v.dayFlags.rino_lunch)) ? 1 : 0;
var slotAM = m < 720 && !(v.dayFlags && v.dayFlags.rino_s4_am), slotPM = m >= 780 && m < 1080 && !(v.dayFlags && v.dayFlags.rino_s4_pm);
v.rino_desk_gate = (ok2 && (v.rino_depravity || 0) >= 51 && (slotAM || slotPM)) ? 1 : 0;
var C = window.CL2_RINO_CHAT_CONV;
if (C) {
C.sexNoEnergyGate = false; /* default: the sex routes (drinks/desk/party) keep the mood energy gate */
if (v.rino_drinks_gate) { C.sexGo = 'Rino Drinks'; C.sexLabel = 'Ask her over - drinks at her place again'; C.sexWhen = { v: 'rino_drinks_gate', op: '==', n: 1 }; }
else if (v.rino_lunch_gate) { C.sexGo = 'MUB Rino Lunch'; C.sexLabel = 'Ask her to lunch - the 1F cafe'; C.sexWhen = { v: 'rino_lunch_gate', op: '==', n: 1 }; C.sexNoEnergyGate = true; /* the meal is reachable when tired; the escalation at the table is gated (rino_lunch_tired) */ }
else if (v.rino_desk_gate) { C.sexGo = 'MUB Rino Storage'; C.sexLabel = 'Murmur it - the storage room, now'; C.sexWhen = { v: 'rino_desk_gate', op: '==', n: 1 }; }
else { C.sexGo = 'Rino Party'; C.sexLabel = 'Say yes - apparently Grade 4 earns a hotpot'; C.sexWhen = { v: 'rino_party_gate', op: '==', n: 1 }; }
} })()>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data: _first ? window.CL2_RINO_INTRO_CONV : window.CL2_RINO_CHAT_CONV, leaveTo: 'MUB Forecasting Division' })>><</timed>><<hud>>\
<div class="loc-prose loc-prose--above">Minato Station — a concourse the size of a hangar, ad screens looping the tower in its night colors over everyone's heads. Half of Tokyo comes through here and most of them are looking at their phones.</div>\
<div class="loc-scene loc-scene--big">
<img src="img/place/minato/minato_station.jpg" alt="">
<span class="hotspot hotspot--icon" style="left:55%;top:65%;width:6%"><<link '<img src="img/nav/ic_station.png" alt="Board a train"><span class="hot-label">Board a train</span>' "Tokyo Map">><</link>></span>
<span class="hotspot hotspot--icon" style="left:53%;top:93%;width:5%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Out to the avenue"><span class="hot-label">Out to the avenue</span>' "Minato Downtown">><</link>></span>
</div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above"><<if _night>>Tokyo Tower owns the end of the avenue, lit the same orange it runs every night of the year. Offices going dark on one side, the money-quiet residences waking up on the other.<<else>>Tokyo Tower owns the end of the avenue — red and white above the glass and the zelkova trees. A bus shelter ad tells me to take it easy and enjoy the downtime. The bus is not wrong.<</if>></div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/minato/' + (_night ? 'minato_downton_n.jpg' : 'minato_downtown.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:79%;top:72%;width:6%"><<link '<img src="img/nav/ic_station.png" alt="Back to the station"><span class="hot-label">Back to the station</span>' "Minato Station">><</link>></span>
<span class="hotspot hotspot--icon" style="left:7%;top:93%;width:5%"><<link '<img src="img/corpo_icon/nav_left.png" alt="Apartment Complex"><span class="hot-label">Apartment Complex</span>' "Minato Apartment Complex">><</link>></span>
</div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">Two corners in, the avenue's roar drops away — mid-rise blocks, balcony gardens, a delivery van idling on its hazards. Ordinary Tokyo, with a Minato postcode doing the quiet bragging.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/minato/' + (_night ? 'minato_apartment_complex_n.jpg' : 'minato_apartment_complex.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:50%;top:93%;width:6%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back toward the avenue"><span class="hot-label">Back toward the avenue</span>' "Minato Downtown">><</link>></span>
<span class="hotspot hotspot--icon" style="left:83%;top:52%;width:6%"><<link '<img src="img/nav/apt_home.png" alt="Rino's building"><span class="hot-label">Rino's building</span>' "Rino Apartment Lobby">><</link>></span>
</div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">A clean little lobby — mailboxes, a ficus doing its best, an intercom that has already judged me. <b>YUKI</b> sits in the fourth-floor column of nameplates.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/npc_apartment/rino/' + (_night ? 'lobby_n.jpg' : 'lobby.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:39%;top:43%;width:6%"><<link '<img src="img/corpo_icon/nav_up.png" alt="Back to the street"><span class="hot-label">Back to the street</span>' "Minato Apartment Complex">><</link>></span>
/* ★ THE GATE: invited (future event) or dev mode -> up to 402; else locked + in-world refusal */
<<set _rinoUp to $rino_invited or ((window.CL2 && CL2.devUnlocked) ? CL2.devUnlocked() : false)>>\
<<if _rinoUp>>\
<span class="hotspot hotspot--icon" style="left:54%;top:38%;width:4.5%"><<link '<img src="img/nav/apt_home.png" alt="Buzz 402 — go up"><span class="hot-label">Buzz 402 — go up</span>' "Rino Genkan">><</link>></span>
<<else>>\
<span class="hotspot hotspot--icon hotspot--locked" style="left:54%;top:38%;width:4.5%"><<link '<img src="img/nav/apt_home.png" alt="The intercom"><span class="hot-label">Buzz 402</span>'>><<run CL2.toast('The intercom crackles once', '“…Yes?” is a question 402 only asks people it expects. You’d need a reason — or an invitation.', { sound: false })>><</link>></span>
<</if>>\
</div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">Her genkan — coats squared on their hooks, umbrellas for two, and guest slippers already turned to face the door. Of course they are.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/npc_apartment/rino/' + (_night ? 'genkan_n.jpg' : 'genkan.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:50%;top:93%;width:5%"><<link '<img src="img/nav/nagi_liv.png" alt="The living room"><span class="hot-label">Living room</span>' "Rino Living Room">><</link>></span>
<span class="hotspot hotspot--icon" style="left:91%;top:44%;width:5%"><<link '<img src="img/nav/nagi_bed.png" alt="Her bedroom"><span class="hot-label">Bedroom</span>' "Rino Bedroom">><</link>></span>
<span class="hotspot hotspot--icon" style="left:7%;top:44%;width:5%"><<link '<img src="img/nav/nagi_sho.png" alt="The bathroom"><span class="hot-label">Bathroom</span>' "Rino Bathroom">><</link>></span>
<span class="hotspot hotspot--icon" style="left:50%;top:44%;width:6%"><<link '<img src="img/corpo_icon/nav_up.png" alt="Leave — down to the lobby"><span class="hot-label">Leave — down to the lobby</span>' "Rino Apartment Lobby">><</link>></span>
</div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">One warm LDK — a sofa the color of dried persimmon, laundry drying over the balcony rail, a kitchen that smells faintly of coffee and soy. The bottom shelf of the bookcase is all certification spines and one row of paperbacks that actually got read.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/npc_apartment/rino/' + (_night ? 'living_kitchen_n.jpg' : 'living_kitchen.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:50%;top:93%;width:6%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back to the genkan"><span class="hot-label">Back to the genkan</span>' "Rino Genkan">><</link>></span>
</div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above"><<if $rino_invited and ($min gte 1320 or $min lt 360)>>Dark, warm, moon through the curtain gap — and Rino, asleep in the tangle of her own sheets, exactly where the key says she’d be.<<elseif $rino_invited and $min gte 1080>>Her bed is still made and the lamp still warm — the flat is awake around her somewhere, water running, a drawer sliding shut. She won’t be down until late. Ten, maybe. Later, some nights.<<else>>Neat, soft, unhurried — the bed made properly, a vanity with everything in its row, and one worn teddy bear supervising the dresser like a small auditor.<</if>></div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/npc_apartment/rino/' + (_night ? 'bedroom_n.jpg' : 'bedroom.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:50%;top:93%;width:6%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back to the genkan"><span class="hot-label">Back to the genkan</span>' "Rino Genkan">><</link>></span>
/* ★ the 22:00-06:00 repeatable (author spec 2026-07-12): once MC holds her spare key ($rino_invited), she sleeps
here nightly 22:00-06:00. The icon NEVER hides after sex — re-clicking replays the see-only recap (the 9V
cooldownFlag 'rino_sleep_sex' flips same-night repeats to the recap; midnight resets it to a fresh full scene). */
<<if $rino_invited and ($min gte 1320 or $min lt 360)>>\
<span class="hotspot hotspot--figure" style="left:63%;top:55%;height:10%"><<link '<img src="img/corpo_icon/rino_icon_2.png" alt="Rino — asleep"><span class="hot-label">Rino · asleep</span>' "Rino Night Choice">><</link>></span>
<</if>>\
</div><<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<div class="loc-prose loc-prose--above">Bath and laundry in one bright room — the drum mid-cycle, towels in café colors, and the guest slippers by the mat still new in their creases.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/npc_apartment/rino/' + (_night ? 'bathroom_n.jpg' : 'bathroom.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:50%;top:93%;width:6%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back to the genkan"><span class="hot-label">Back to the genkan</span>' "Rino Genkan">><</link>></span>
</div>/* ★ the employee-portal landing (author 2026-08-10). Reached from the F&A desk's PC icon; the
Working Interface button continues to MUB Recon. Free to open (his own PC — the Recon still
charges its 180 min on entry as always). List profile: nr + bgm office via the manifest. */
<<hud>>\
<<run CL2.portal.reset()>>\
<<= CL2.portal.html()>>/* Host: PARTY STAGE A (four people; nightout_1 opener -> nightout_2 loop). Entry charges the +45 travel once. */
<<hud>>\
<<if not $dayFlags.rino_party_travel>><<run (function(){ var v = State.variables; v.dayFlags.rino_party_travel = true; v.rino_party_day = v.day || 1; v.rino_party_declined = false; CL2.advanceTime(45); })()>><</if>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data: window.CL2_RINO_PARTY_A_CONV, leaveTo: 'Rino Party B' })>><</timed>>/* Host: PARTY STAGE B (the guys are gone; nightout_3/4 loops; drunker, warmer). */
<<hud>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data: window.CL2_RINO_PARTY_B_CONV, leaveTo: 'Rino Party Cheer' })>><</timed>>/* nightout_5 — the last big beers, the reckless toast. One-shot bridge; charges +60 (the party ran long). */
<<hud>>\
<<if not $dayFlags.rino_cheer_charge>><<run (function(){ State.variables.dayFlags.rino_cheer_charge = true; CL2.advanceTime(60); })()>><</if>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.scene({
video: 'vid/build_2_rino_0/nightout_5_cheer_end_noloop.mp4',
poolId: 'rino_cheer',
herName: 'Rino', herIcon: 'rino_icon',
beats: (window.CL2_RINO_DLG && CL2_RINO_DLG.cheer && CL2_RINO_DLG.cheer.beats) || [[{t:'p',x:'The door shuts behind the guys and she pours two more beers that are far too large, pressing one into my hand without asking.'},{t:'remu',x:'Last round, and I mean the real one. Kanpai, %FIRST%. To tonight, whatever it ends up being.'}]],
menu: [{ label: 'Drink with her - all of it', go: 'Rino Party Temptation' }]
})>><</timed>>/* start_1 — she flops onto the sofa bed, wasted; the pull begins. */
<<hud>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.scene({
video: 'vid/build_2_rino_1/phase_0_drunk_sofa_bed_livingroom_start_1.mp4',
poolId: 'rino_tempt1',
herName: 'Rino', herIcon: 'rino_icon',
beats: (window.CL2_RINO_DLG && CL2_RINO_DLG.tempt1 && CL2_RINO_DLG.tempt1.beats) || [[{t:'p',x:'The beer lands all at once and she goes down onto the sofa bed in slow motion, laughing at nothing, catching my sleeve on the way and not letting go.'},{t:'remu',x:'Whoa, the floor moved. Sit down with me a second, %FIRST%. The room behaves better when you hold it still.'}]],
menu: [{ label: 'Sit down beside her', go: 'Rino Party Temptation 2' }]
})>><</timed>>/* start_2 — THE DILEMMA. Her deliberate seduction under the drunk cover; his war. Decline lives HERE (author:
dilemma narrative-only — no stat punishment either way; the affair ledger is the long-term cost). */
<<hud>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.scene({
video: 'vid/build_2_rino_1/phase_0_drunk_sofa_bed_livingroom_start_2_temptation.mp4',
poolId: 'rino_tempt2',
herName: 'Rino', herIcon: 'rino_icon',
beats: (window.CL2_RINO_DLG && CL2_RINO_DLG.tempt2 && CL2_RINO_DLG.tempt2.beats) || [[{t:'p',x:'She pulls me down by the collar with a precision no drunk woman should have, and her eyes underneath the beer are awake and honest and have been decided for weeks. My ring sits cold on my finger. Remu sleeps two wards away. And Rino - warm, right here - and looking at me like a ledger she has already balanced.'},{t:'remu',x:'I am drunk and I am sure, %FIRST% - both of those are true. The second one has been true since spring. You have to be the one who says it.'}]],
menu: [
{ label: 'Walk away - blanket over her, and go', go: 'Rino Party Declined', cls: 'cv-choice--ease' },
{ label: 'Stop fighting it', go: 'Rino Party Sex', cls: 'cv-choice--cum' }
]
})>><</timed>>/* Scene 1 (9U) — standalone CL2.sex launcher; exits to the bedroom choice. */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data: window.CL2_RINO_PARTY_SEX, leaveTo: 'Rino Night Choice', recapReturn: 'Rino Living Room' })>><</timed>>/* The faithful walk-away. No punishment, no reward — the night just ends (party re-offers in a week). */
<<hud>>\
<<if not $dayFlags.rino_declined_charge>><<run (function(){ var v = State.variables; v.dayFlags.rino_declined_charge = true; v.rino_party_declined = true; CL2.advanceTime(30); })()>><</if>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.scene({
video: 'vid/build_2_rino_1/phase_0_drunk_sofa_bed_livingroom_start_1.mp4',
poolId: 'rino_declined',
herName: 'Rino', herIcon: 'rino_icon',
beats: (window.CL2_RINO_DLG && CL2_RINO_DLG.declined && CL2_RINO_DLG.declined.beats) || [[{t:'p',x:'I stand up while I still can. Blanket from the armrest, over her shoulders; the burner clicked off; the empties gathered into a quiet pyramid by the sink. At the door I look back once - at the open blouse and the trust and the whole road not taken - and I pull the door shut on all of it. The train home runs bright and empty and my ring has never weighed so much, or sat so right.'}]],
menu: [{ label: 'Pull the door shut behind you', go: 'Rino Apartment Lobby' }]
})>><</timed>>/* Post-scene-1: her bedroom doorway (first time) AND the 23:00+ repeat entry (the 48-minato bedroom sprite routes here).
★ Author rulings 2026-07-11: the FIRST run is commit-only — no "slip out" (that choice already happened at Temptation 2)
and it must ALWAYS play (the engine's energy gate is skipped via skipTired on first run — see Rino Sleep Sex below).
REPEATS get both buttons + the energy gate applies. */
<<hud>>\
<<run (function(){ var v = State.variables; if ((v.rino_evt || 0) < 1) v.rino_evt = 1; })()>>\
<<if $rino_evt gte 2>>\
<div class="loc-prose loc-prose--above">Late, and the flat answers the key like it was expecting me. She’s asleep in the tangle of her own sheets, one arm thrown over the pillow, breathing slow and even. She hasn’t heard the door.</div>\
<<else>>\
<div class="loc-prose loc-prose--above">The flat is silent except for her breathing. She’s where I laid her — naked in the tangle of her own sheets, moonlit, miles under. The front door is eight steps one way. Her bed is two steps the other. My heart is still going wrong in both directions.</div>\
<</if>>\
<div class="loc-scene loc-scene--big">
<img src="img/place/npc_apartment/rino/bedroom_n.jpg" alt="">
<span class="hotspot hotspot--figure" style="left:63%;top:55%;height:10%"><<link '<img src="img/corpo_icon/rino_icon_2.png" alt="Rino — asleep"><span class="hot-label">Slip into her bed</span>' "Rino Sleep Sex">><</link>></span>
</div>
<div class="cv-menu"><<if $rino_evt gte 2>><a class="cv-choice cv-choice--ease" data-passage="Rino Genkan">Slip out quietly — let her sleep</a><</if>><a class="cv-choice cv-choice--cum" data-passage="Rino Sleep Sex">Slip into her bed</a></div>/* Scene 2 (9V) — the sleeping temptation; grade-forked aftermath; also the 23:00+ REPEATABLE (bedroom sprite, 48). */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data: window.CL2_RINO_SLEEP_SEX, leaveTo: 'Rino Sleep Result', recapReturn: 'Rino Bedroom', skipTired: ((State.variables.rino_evt || 0) < 2) })>><</timed>>/* ★ THE DRINKS RE-INVITE (author 2026-07-12) — the post-scene-1 shortcut: office ask (16:00–18:00, $rino_drinks_gate in 45)
-> straight to drinks at her flat (nightout_5 kanpai; no party, no guys). Escalation -> the SAME Scene 1 launcher
('Rino Party Sex' — aftermath/Night Choice flow reused wholesale). Once/day via $dayFlags.rino_drinks (set here);
$rino_drinks_day feeds the onMidnight $rino_drinks_yday derivation (the morning-after office open). Leave = Rino Genkan. */
<<hud>>\
<<if not $dayFlags.rino_drinks>><<run (function(){ var v = State.variables; v.dayFlags.rino_drinks = true; v.rino_drinks_day = v.day || 1; CL2.advanceTime(45); })()>><</if>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data: window.CL2_RINO_DRINKS_CONV, leaveTo: 'Rino Genkan' })>><</timed>>/* The exit router: banks the event stage + the numeric result mirror, awards the key ONCE (B-or-better),
never revokes it (author ruling), and lands in the right room. */
<<run (function(){
var v = State.variables;
v.rino_evt = 2;
v.rino_result_n = (v.rino_sleep_result === 'b') ? 2 : 1; /* numeric mirror for condOK (opens can't compare strings) */
if (v.rino_sleep_result === 'b' && !v.rino_invited) {
v.rino_invited = true;
if (CL2.toast) CL2.toast('Her spare key', 'Post-training access, she called it. Her door answers to you now — the intercom downstairs just became a formality.', { sound: 'notification' });
}
})()>>\
<<if $rino_sleep_result is 'b' or $rino_invited>><<goto "Rino Bedroom">><<else>><<goto "Rino Apartment Lobby">><</if>>/* ★ LEGACY SURFACE, RETIRED (ECONOMY_REBALANCE_SPEC §5, 2026-07-20). This passage was the pre-PC food-budget
screen; it carried its OWN duplicate food-cost table and charged $money independently of the Monthly Plan —
a stale-price double-spend once the 家計簿 rebalance landed. It is orphaned (no inbound links) but the
passage NAME stays: the manifest + the BGM/theme routers reference it. Body = a redirect, table deleted.
The ONE food-cost source is window.CL2_PC_FOOD (36-pc.twee); the plan is paid on the PC. */
<<hud>>
<div class="lf-title">The little table</div>
The food ledger moved off the kitchen table years ago — it lives on the PC now, one line in the month’s plan with the rent and the trains. Remu was quietly pleased. The table went back to being a table.
<div class="loc-nav">
<<button "Back to the apartment">><<goto "Apartment">><</button>>
</div>/* ★ the 昇格試験 sitting — the small meeting room (static art; no exam clip exists — asset ruling 2026-07-12).
Reached from the SMALL MEETING ROOM's laptop hotspot (author move 2026-08-07 — was the Meeting Lobby),
which only renders when CL2.mubPromo.examAvail() returns a kind (window week + file ready + not failed
this cycle). The guard here = the belt for direct entry. All exits return to the small room. */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<<set _pex to (window.CL2 && CL2.mubPromo) ? CL2.mubPromo.examAvail(State.variables) : ''>>\
<<if _pex>>\
<div class="loc-prose loc-prose--above">The small room — four chairs, one round table, a door that actually closes. Today it holds a clock, a sealed paper, and the next grade of your name. Nobody said the word luck on the way in.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/chiyoda/mub_bank/' + (_night ? 'mub_small_meeting_room_n.jpg' : 'mub_small_meeting_room.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:6%;top:50%;width:5%"><<link '<img src="img/corpo_icon/nav_left.png" alt="Leave the paper — another day"><span class="hot-label">Leave the paper — another day</span>' "MUB Small Meeting Room">><</link>></span>
<div id="pex-host"></div>
</div>
<<timed 40ms>><<run CL2.promoExam.start()>><</timed>>
<<else>>\
<div class="loc-prose loc-prose--above">The small room stands empty — no paper on the table, no panel on the calendar. The 人事異動 window convenes the exam in its final week, and only for a file that already carries the marks.</div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/chiyoda/mub_bank/' + (_night ? 'mub_small_meeting_room_n.jpg' : 'mub_small_meeting_room.jpg')" alt="">
<span class="hotspot hotspot--icon" style="left:6%;top:50%;width:5%"><<link '<img src="img/corpo_icon/nav_left.png" alt="Back"><span class="hot-label">Back</span>' "MUB Small Meeting Room">><</link>></span>
</div>
<</if>>/* ★ THE RINO OFFICE TIER (author rulings 2026-07-12; MUB_PROMOTION chain integration):
GATE (both): $rino_evt >= 2 (the affair — her key) AND $mub_rank >= 2 (係員). Computed fresh on MUB Rino Chat
entry (45) into $rino_lunch_gate / $rino_desk_gate; the conv's ONE gold button is mutated per-entry (priority
drinks > lunch > desk > party). LUNCH: 11:00-12:45, once/day (dayFlags.rino_lunch) — +60 min, +12 energy,
-6 stress, -¥1,800 (係員 pays for two); the offer at the end routes to the BJ (scene 3) or the storage room
(scene 4) or declines free. DESK: depravity >= 51, max 2/day via dayFlags.rino_s4_am (< 12:00) + rino_s4_pm
(13:00-18:00). Scene passages only — the cafe/storage art rides PASSBG (author ruling #3; pantry deferred).
First-run law: each scene's first-ever run passes skipTired (scene_log check). Backdrops: PASSBG in 03-script. */<<hud>>\
<<if not $dayFlags.rino_lunch>><<run (function(){ var v = State.variables; v.dayFlags.rino_lunch = true; v.rino_lunch_tired = ((v.energy || 0) < 20) ? 1 : 0; CL2.advanceTime(60); v.energy = Math.min(100, (v.energy || 0) + 12); v.stress = Math.max(0, (v.stress || 0) - 6); v.money = Math.max(0, (v.money || 0) - 1800); })()>><</if>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.scene({
video: 'vid/build_2_rino_3/phase_0_lunch_break_1_start_no_loop.mp4',
poolId: 'rino_lunch1', herName: 'Rino', herIcon: 'rino_icon',
beats: (window.CL2_RINO_OFFICE && CL2_RINO_OFFICE.lunch1) || [[{t:'p',x:'The 1F cafe at noon - booths, frosted glass, the whole floor pretending not to notice who sits with whom. She slides in across from me and flips the menu without reading it.'},{t:'remu',x:'Order the set. It clears in nine minutes and the coffee refills. I have this place fully priced, %FIRST%.'}]],
menu: [{ label: 'Take the booth - order the set', go: 'MUB Rino Lunch B' }]
})>><</timed>><<hud>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.scene({
video: 'vid/build_2_rino_3/phase_0_lunch_break_2_start_no_loop.mp4',
poolId: 'rino_lunch2', herName: 'Rino', herIcon: 'rino_icon',
beats: (window.CL2_RINO_OFFICE && CL2_RINO_OFFICE.lunch2) || [[{t:'p',x:'The food lands fast and she talks with the efficiency of a woman on a clock - floor gossip, a variance story, one dry joke at the expense of the eighth floor.'},{t:'remu',x:'Eat. You listen better with your mouth full, %FIRST%.'}]],
menu: [{ label: 'Eat - and listen', go: 'MUB Rino Lunch C' }]
})>><</timed>><<hud>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.scene({
video: 'vid/build_2_rino_3/phase_0_lunch_break_3_loop.mp4',
poolId: 'rino_lunch3', herName: 'Rino', herIcon: 'rino_icon',
beats: (window.CL2_RINO_OFFICE && CL2_RINO_OFFICE.lunch3) || [[{t:'p',x:'The middle of lunch goes warm and unhurried - her foot finds mine under the table once, deniably.'},{t:'remu',x:'Mm. This arrangement works, %FIRST%. Lunch at OJT rates.'}]],
menu: [{ label: 'Let the hour run', go: 'MUB Rino Lunch D' }]
})>><</timed>><<hud>>\
<div id="cv-host"></div>
<<set _tired to State.variables.rino_lunch_tired>>\
<<set _lunchBeats to (_tired
? [[{t:'p',x:'She checks the clock, then me, and her eyes settle on the shadows under mine. She sets her chopsticks down and does not make the offer.'},{t:'remu',x:'No. Not today, %FIRST% - you came in running on fumes. The numbers are always wrong when you are this tired, and so is this. Finish the water; the stall keeps.'}]]
: ((window.CL2_RINO_OFFICE && CL2_RINO_OFFICE.lunchEnd) || [[{t:'p',x:'She finishes the last of the set and looks up at me.'},{t:'remu',x:'Twenty minutes on the clock, %FIRST%. So: the quick line item, the full position, or we just file it as lunch. Price your own afternoon.'}]]))>>\
<<set _lunchMenu to (_tired
? [{ label: 'Just lunch - she is right', go: 'MUB Forecasting Division', cls: 'cv-choice--ease' }]
: [{ label: 'The quick line item - the far stall', go: 'MUB Rino Lunch BJ', cls: 'cv-choice--cum' }, { label: 'The full position - the storage room', go: 'MUB Rino Storage', cls: 'cv-choice--cum' }, { label: 'Just lunch - back to the desk', go: 'MUB Forecasting Division', cls: 'cv-choice--ease' }])>>\
<<timed 40ms>><<run CL2.scene({
video: 'vid/build_2_rino_3/phase_0_lunch_break_4_end_no_loop.mp4',
poolId: 'rino_lunch4', herName: 'Rino', herIcon: 'rino_icon',
beats: _lunchBeats,
menu: _lunchMenu
})>><</timed>>/* Scene 3 (9X data) — the cafe restroom BJ. Oral-only (noHerCum; Selfish-tier cap = the engine's honesty). */
<<hud>>\
<<if $dayFlags.rino_lunch and not $dayFlags.rino_lunch_lust>><<run (function(){ var v = State.variables; v.dayFlags.rino_lunch_lust = true; v.lust = Math.min(100, (v.lust || 0) + 8); })()>><</if>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data: window.CL2_RINO_LUNCH_BJ, leaveTo: 'MUB Forecasting Division', recapReturn: 'MUB Forecasting Division', skipTired: !((State.variables.scene_log || {})['rino_lunch_bj']) })>><</timed>>/* Scene 4 (9Y data) — the 7F storage room. Reached from the lunch offer OR the desk route; entering burns the
morning slot before 12:00, the afternoon slot at 12:00+ (the lunch route lands ~12:30 -> it eats the PM slot —
flagged executor call, author-visible in the spec note). */
<<hud>>\
<<run (function(){ var v = State.variables, m = (typeof v.min === 'number') ? v.min : 420; v.dayFlags = v.dayFlags || {}; if (m < 720) v.dayFlags.rino_s4_am = true; else v.dayFlags.rino_s4_pm = true; })()>>\
<<if $dayFlags.rino_lunch and not $dayFlags.rino_lunch_lust>><<run (function(){ var v = State.variables; v.dayFlags.rino_lunch_lust = true; v.lust = Math.min(100, (v.lust || 0) + 8); })()>><</if>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data: window.CL2_RINO_STORAGE, leaveTo: 'MUB Forecasting Division', recapReturn: 'MUB Forecasting Division', skipTired: !((State.variables.scene_log || {})['rino_storage']) })>><</timed>>/* ★ SCENE 5's front door (author spec 2026-07-13): Rino's evening desk, 18:00-21:00 on her stay-late days
(Mon/Wed/Fri + even-week Thu — CL2.office.rinoLate). A normal chat with OVERTIME topics; the gold button
(mutated below) leads to the office scene when the tier gates pass: rino_evt >= 2 + 係員 + depravity >= 51
(author kept 51 — the office tier's one rating), once per day. */
<<hud>>\
<<run (function(){ var v = State.variables;
var ok = (v.rino_evt || 0) >= 2 && (v.mub_rank || 0) >= 2 && !v.mub_dead && (v.rino_depravity || 0) >= 51;
v.rino_eve_gate = (ok && !(v.dayFlags && v.dayFlags.rino_office_eve)) ? 1 : 0;
var ok6 = ok && (v.rino_depravity || 0) >= 61 && !!((v.scene_log || {})['rino_office_eve']);
v.rino6_gate = (ok6 && !(v.dayFlags && v.dayFlags.rino_office_eve)) ? 1 : 0;
/* scene 7 (author 2026-07-14): the CULMINATION - scene 6 done + depravity >= 61 + her spare key (the study date is AT her flat); shares the once-per-evening latch */
var ok7 = ok6 && !!((v.scene_log || {})['rino_office_night']) && !!v.rino_invited;
v.rino7_gate = (ok7 && !(v.dayFlags && v.dayFlags.rino_office_eve)) ? 1 : 0;
var C = window.CL2_RINO_EVE_CONV;
if (C) { C.sexGo = 'MUB Rino Office Eve'; C.sexLabel = 'Clear her desk - the floor went home'; C.sexWhen = { v: 'rino_eve_gate', op: '==', n: 1 };
/* scene 6 (author 2026-07-14): a SECOND gold button - depravity >= 61 + scene 5 done at least once; both scenes repeatable, sharing the once-per-evening latch */
C.sexMore = [{ go: 'MUB Rino Office Night', label: 'Walk up to her and harass her', when: { v: 'rino6_gate', op: '==', n: 1 } },
{ go: 'Rino Study Talk', label: 'Ask her to help you study - at hers', when: { v: 'rino7_gate', op: '==', n: 1 } }]; }
})()>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data: window.CL2_RINO_EVE_CONV, leaveTo: 'MUB Forecasting Division' })>><</timed>>/* Scene 5 (9Z data) — evening overtime in the F&A office itself (author canon: MC and Rino's own room).
Once/day via dayFlags.rino_office_eve (latched here); skipTired on the true first run. */
<<hud>>\
<<run (function(){ var v = State.variables; v.dayFlags = v.dayFlags || {}; v.dayFlags.rino_office_eve = true; })()>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data: window.CL2_RINO_OFFICE_EVE, leaveTo: 'MUB Forecasting Division', recapReturn: 'MUB Forecasting Division', skipTired: !((State.variables.scene_log || {})['rino_office_eve']) })>><</timed>>/* Scene 6 "The Proposition" (author rulings 2026-07-14) - the consensual-harassment night game.
NO entry latch: the shared once-per-evening flag (dayFlags.rino_office_eve) is banked by the scene's
cooldownFlag in the AFTERMATH, so the talk-only / kiss-only bail exits never burn the night.
skipTired insurance on the true first run. */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data: window.CL2_RINO_OFFICE_NIGHT, leaveTo: 'MUB Forecasting Division', recapReturn: 'MUB Forecasting Division', skipTired: !((State.variables.scene_log || {})['rino_office_night']) })>><</timed>>/* Scene 7 (author 2026-07-14) - the overtime study date. Leaves the office, +45 travel to her Minato
flat (she has invited him - rino_invited is the gate), lands at the study minigame. Latches the shared
once-per-evening flag on ARRIVAL here (the study/confession is the commitment; unlike the office scenes
there is no bail, so latching on entry is correct). */
<<run (function(){ var v = State.variables; v.dayFlags = v.dayFlags || {}; v.dayFlags.rino_office_eve = true; CL2.advanceTime(45); })()>>\
<<goto "Rino Study Date">>/* ★ THE hangout conv (v2): first visit shows the reunion topics (when karen_met==0), repeats show the
rolling small talk — one engine, one passage. The leave button IS the drink offer (leaveTo -> the Offer
passage) and hides behind leaveAfterMin 30 (3 topics ~= the drive pattern, author 2026-08-08); after
piece 2 latches $karen1_done the offer retires (leave -> the lobby, gate 0). Per-entry data mutations
set ALL forked fields BOTH ways — a window global keeps stale values otherwise (the sexMore-leak law). */
<<hud>>\
<<run (function(){ var v = State.variables, D = window.CL2_SUZURAN_CONV;
D.beginLabel = v.karen_met ? 'Join the window crowd.' : 'Walk over.';
D.leaveAfterMin = v.karen1_done ? 0 : 30;
D.leaveLabel = v.karen1_done ? 'Head for the elevator' : 'Hear them out — they’re building to something';
}())>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data: window.CL2_SUZURAN_CONV, leaveTo: State.variables.karen1_done ? 'MUB Meeting Lobby' : 'MUB Suzuran Offer' })>><</timed>>/* ★ the drink ask + the fork (entered ONLY through the conv's gated leave). Entry latches $karen_met —
reaching the offer = the reunion story completed. First time: the trio's scripted ask (3 bubbles);
repeats: a rolled ask (<=2 bubbles). Join is gated on ¥10,000 CASH ($money, author spec); under the
bar the pill stays visible + dim and the closing narr becomes the broke line (inviteNarr claims izakaya
money in his wallet, so it may NOT render broke). ⚠ join target = the PIECE-2 placeholder — no yen are
charged until the real event exists (the charge belongs to its entry). */
<<hud>>\
<<set _first to (window.CL2 && CL2.suzuran) ? CL2.suzuran.meet() : false>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline loop src="vid/build_4_karen_0/phase_0_office_encounter_karen_chuta_makise_loop_2_karen.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"><<= CL2_SUZURAN.offerHTML(_first)>><<if $money gte 10000>><<= CL2_SUZURAN.narrHTML(CL2_SUZURAN.inviteNarr)>><<else>><<= CL2_SUZURAN.narrHTML(CL2_SUZURAN.brokeLine)>><</if>></div><div class="cv-meta"></div></div></div><div class="cv-menu">\
<<if $money gte 10000>><a class="cv-choice cv-choice--go" data-passage="Karen Bar Night">Join them — the first round's mine (¥10,000)</a>\
<<else>><span class="cv-choice cv-choice--locked">Join them (¥10,000)</span><</if>>\
<a class="cv-choice cv-choice--leave" data-passage="MUB Suzuran Decline">Next time — someone's cooking for me</a></div>\
</div>/* the beg-off beat (rolled) — they take it warmly; back to the corridor. */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline loop src="vid/build_4_karen_0/phase_0_office_encounter_karen_chuta_makise_loop_1.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"><<= CL2_SUZURAN.declineHTML()>></div><div class="cv-meta"></div></div></div><div class="cv-menu"><a class="cv-choice cv-choice--leave" data-passage="MUB Meeting Lobby">Back to the hallway</a></div></div>
/* ★ 'Karen Bar Night' (the piece-2 seam) now lives in 52-karen-night.twee as the REAL Act-1 entry —
the stub that used to sit here is retired (author GO 2026-08-09). The join anchor is unchanged. *//* ★ ACT 1 ENTRY (author GO 2026-08-09). The ONLY charge seam: CL2.karen1.begin() takes the ¥10,000
round and arms the night lock. Guarded internally so a refresh/save-load can never double-charge. */
<<hud>>\
<<run CL2.karen1.begin()>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data: window.CL2_KAREN1_BAR_CONV, leaveTo: 'Karen Bar Hinge' })>><</timed>>/* the blazer comes off - the build's ONLY garment removal; the composure starts to slide. */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline src="vid/build_4_karen_1/phase_1_bar_hangout_transition_getting_tipsy_noloop.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"><p class="cv-narr"><<= CL2.mcTokens(CL2_KAREN1.hingeNarr)>></p></div><div class="cv-meta"></div></div></div><div class="cv-menu"><a class="cv-choice cv-choice--go" data-passage="Karen Bar Drunk">Let the night have you both.</a></div></div><<hud>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data: window.CL2_KAREN1_DRUNK_CONV, leaveTo: 'Karen Bar Ask' })>><</timed>>/* ★ HER ASK + DECLINE VALVE #1 (author: she asks for her house OR the nearby hotel, SHE pays). */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline src="vid/build_4_karen_1/phase_3_bar_hangout_drunk_noloop_1_comingback_from_toilet.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"><p class="cv-narr"><<= CL2.mcTokens(CL2_KAREN1.askNarr)>></p><<= CL2.office.msg('karen_icon','Karen', CL2_KAREN1.askKaren)>><<= CL2.office.msg('karen_icon','Karen', CL2_KAREN1.askKaren2)>></div><div class="cv-meta"></div></div></div><div class="cv-menu"><a class="cv-choice cv-choice--leave" data-passage="Karen Night Taxi"><<= CL2_KAREN1.forkHouse>></a><a class="cv-choice cv-choice--go" data-passage="Karen Bar Exit"><<= CL2_KAREN1.forkHotel>></a></div></div>/* DECLINE VALVE #1 - her door, goodnight, home. Nothing latches; the hallway offer re-arms. */
<<hud>>\
<<run CL2.karen1.taxi()>>\
<div class="loc-prose loc-prose--above"><<= CL2.mcTokens(CL2_KAREN1.houseEndNarr)>></div>\
<<button "Go home to Remu">><<goto "Apartment Living Room">><</button>>/* he walks her out - past Makise, who sees exactly what he sees (author ②: the table is friends-only). */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline src="vid/build_4_karen_1/phase_3_bar_hangout_drunk_noloop_2_end_exiting_the_bar.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"><p class="cv-narr"><<= CL2.mcTokens(CL2_KAREN1.exitNarr)>></p><<= CL2.office.msg('makise_icon','Makise', CL2_KAREN1.makiseWatch)>></div><div class="cv-meta"></div></div></div><div class="cv-menu"><a class="cv-choice cv-choice--go" data-passage="Karen Hotel Arrival">Walk her round the corner.</a></div></div>/* ★ THE BED FORK (author dictation): ignore the temptation and go home to Remu, or stay. */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline src="vid/build_4_karen_1/phase_4_hotel_drunk_noloop_1_throw_karen_to_bed.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"><p class="cv-narr"><<= CL2.mcTokens(CL2_KAREN1.bedForkNarr)>></p></div><div class="cv-meta"></div></div></div><div class="cv-menu"><a class="cv-choice cv-choice--leave" data-passage="Karen Night Walk Away"><<= CL2_KAREN1.bedWalk>></a><a class="cv-choice cv-choice--sex" data-passage="Karen Phone Cutscene"><<= CL2_KAREN1.bedFuck>></a></div></div>/* DECLINE VALVE #2 - he chooses Remu at the door. Nothing latches. */
<<hud>>\
<<run CL2.karen1.walkAway()>>\
<div class="loc-prose loc-prose--above"><<= CL2.mcTokens(CL2_KAREN1.walkAwayNarr)>></div>\
<<button "Go home to your wife">><<goto "Apartment Living Room">><</button>>/* ★ THE PHONE CUTSCENE (author dictation 2026-08-09): the stage pauses + blurs, the phone floats in and
texts Remu BY ITSELF; she answers oblivious-caring-worried; then the night continues. The exchange is
REAL - it lands in her phone thread. */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline loop src="vid/build_4_karen_1/phase_4_hotel_drunk_noloop_1_throw_karen_to_bed.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div></div>
<<timed 260ms>><<run CL2.karen1.phoneScene('Karen Hotel Sex')>><</timed>>/* ACT 2 - the full CL2.sex scene (CL2_KAREN1_SEX, the affair ledger).
⚠ CL2.sex has NO DOM of its own - it REUSES a .cv stage, so the skeleton must exist in the passage
before start() runs (a bare host div renders nothing at all). STANDALONE passage => recapReturn
is required as the safety exit. */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data: window.CL2_KAREN1_SEX, leaveTo: 'Hotel Chiyoda Room', recapReturn: 'Hotel Chiyoda Room', skipTired: true })>><</timed>>
/* ⚠ skipTired MUST be here, not on the data object - the engine reads opts.skipTired only. Without it a
tired MC gets bounced at the door and the morning seam latches the night away unplayed (review HIGH).
leaveTo = the hotel BEDROOM location (author 2026-08-09: "at the end of the sex scene, player should
have been taken to the hotel bedroom location") - the room's Sleep action carries the morning seam. *//* ★ the sleeping scene (author 2026-08-09: "normal sleeping mechanic - play video sleeping_night_noloop").
The karen_0 clip plays once and freezes; the single exit carries the morning seam (latch + 06:30). */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline src="vid/build_4_karen_0/sleeping_night_noloop.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"><p class="cv-narr">I kill the lamp and lie down on the half of the bed she's left me, which is not really half. Her breathing doesn't change. I lie there meaning to work out what tomorrow looks like, and I don't get far with it before I'm gone as well.</p></div><div class="cv-meta"></div></div></div><div class="cv-menu"><a class="cv-choice cv-choice--leave" data-passage="Karen Night Morning">Let the night end.</a></div></div>/* ★ THE MORNING SEAM. $karen1_done latches HERE and only here (that is what retires piece 1's drink
offer), the night sleeps through to 06:30, and the MORNING schedule arms - then it hands straight
to the room, because the author's rule is that he wakes up IN the hotel room, not on a card.
⚠ THE RUN COMES BEFORE THE HUD: the hud macro prints the clock at render time, so advancing time
after it left a stale chip on screen (author-reported: sidebar Fri 06:30, chip Thu 22:00). */
<<run CL2.karen1.morning()>>\
<<hud>>\
<<if $pending_weekly_report>>\
/* ★ SETTLEMENT SATURDAY AT THE CHIYODA (author ruling 2026-08-10, option 3): the night crossed the
Saturday boundary, so the week settled while he slept next to a woman who is not on it. The full
Weekly Report intercepts the wake — the remu10_pending pattern — and its exit routes BACK HERE
($karen_morn_return), not to the apartment. The morning schedule is already armed and the report
costs no game time, so her 30-minute window is intact behind the card. */
<<set $karen_morn_return to 1>>\
<<goto "Weekly Report">>\
<<else>>\
<<goto "Hotel Chiyoda Room">>\
<</if>>/* ★ THE DESK CHAT (author 2026-08-10): her office sprite clicked -> the chatting-scene gameplay
(CL2.conv) — learn her (karen_lore) + build the relationship (karen_aff). Day/night stage clips
picked here at render (the _day/_night pairs in build_4_karen_0); entry noloop -> openVideo,
work loop -> videos + loopVideo (rolls on topic picks only).
THE SCENE-5 ASK lives on the conv's gold button: after 19:00 + karen_depravity >= 55
(CL2.karenOffice.askOK's clauses, expressed as sexWhen so the engine renders/gates it natively).
⚠ sexGo/sexWhen/sexLabel are set HERE per the host-passage mutation law (a window-global conv
object must never carry a stale gold button from another passage). */
<<hud>>\
<<run (function () {
var d = window.CL2_KAREN_OFFICE_CONV, v = State.variables;
var night = ((typeof v.min === 'number') ? v.min : 0) >= 1080;
d.openVideo = 'phase_0_office_karen_work_noloop_1_' + (night ? 'night' : 'day') + '.mp4';
d.videos = ['phase_0_office_karen_work_loop_2_' + (night ? 'night' : 'day') + '.mp4'];
d.sexGo = 'Karen Sex Scene 5';
d.sexLabel = 'Ask her to stay behind tonight';
d.sexWhen = [{ v: 'min', op: '>=', n: 1140 }, { v: 'karen_depravity', op: '>=', n: 55 }];
/* ★ the SECOND gold button (author 2026-08-10): from 18:00 he can take her straight back to the
Chiyoda - the seam opens the k1 scene ON THE KISS and the whole hotel night runs again. */
d.sexMore = [{ go: 'Karen Hotel Again', label: 'Take her back to the Chiyoda', when: { v: 'min', op: '>=', n: 1080 } }];
}())>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data: window.CL2_KAREN_OFFICE_CONV, leaveTo: 'MUB Capital Division' })>><</timed>>/* ★ THE OFFICE AT NIGHT (build_4_karen_5, 57 clips; author GO 2026-08-10). Reached ONLY through
the desk chat's gold ask (19:00+ · karen_depravity >= 55). Built to the Karen-flow standard;
data 9O + pools 90-karen5-dlg via tools/assemble_karen_5.py. FULL energy price (the 0.1 scale
is hotel-scoped). No skipTired: a wrecked man gets her office-voice refusal, correctly. */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data: window.CL2_KAREN5_SEX, leaveTo: 'MUB Capital Division', recapReturn: 'MUB Capital Division' })>><</timed>>/* ★ THE REPEAT NIGHT SEAM (author 2026-08-10). Reached from the desk chat's second gold button
(18:00+). hotelAgain() arms the night + charges the 30-min crossing (run BEFORE hud - the clock
law), then hands straight to the existing k1 launcher, whose start node IS the kiss. From there
the whole built night runs again: aftermath -> the room -> her shower window (k2) -> the bed
edge (k3, the only way to sleep) -> the short night -> the 06:30 morning schedule. */
<<run CL2.karen1.hotelAgain()>>\
<<hud>>\
<<goto "Karen Hotel Sex">>/* Scene 7 front door part 1 — the immersive study minigame at Rino's living-room table, then the
confession hand-off into CL2.sex (CL2_RINO_STUDY_SEX). Reached from the overtime Evening Chat's
3rd gold button via the travel passage. */
<<hud>>\
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted loop playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu" id="rsd-panel"></div></div>
<<timed 40ms>><<run CL2.studyDate.start({ leaveTo: 'Rino Bedroom' })>><</timed>>/* The exit router (author ruling: the night ends 23:30 at the earliest). Clamps the clock forward,
then lands in her bedroom. Shares the once-per-evening latch (banked by the sex cooldownFlag). */
<<run (function(){ var v = State.variables; if ((v.min || 0) < 1410) v.min = 1410; })()>>\
<<goto "Rino Bedroom">>/* Scene 7 front door part 0 (author 2026-07-14): the IN-OFFICE cert discussion at Rino's desk BEFORE they
travel. She asks about the certificate the MC is chasing; the video shuffles the build_2_rino_6 overtime
-talk loops. The gold button ('Get your coat - study at hers') walks out to Rino Study Travel. No latch
here - bailing ('Not tonight') never burns the evening; the commitment is the travel. */
<<hud>>\
<<set $rino_cert_stage to (function(){ var c = (State.variables.bk_certs) || []; return (c.indexOf('cfa1') >= 0) ? 3 : (c.indexOf('g2') >= 0 ? 2 : (c.indexOf('g4') >= 0 ? 1 : 0)); })()>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data: window.CL2_RINO_STUDY_TALK_CONV, leaveTo: 'MUB Forecasting Division' })>><</timed>>/* ★ the HARD-TO-MISS surface (piece 1: "unlike normal chat messages") — a wake-interception card in the
.pdoor language: the phone is already in his hand, the message + the car photo fill the screen. The
thread copy also lands via CL2_PHONE_TEXTS (38) for re-reading; THIS is the delivery moment. */
<<hud>>\
<<set $ririko_offer_pending to false>>\
<<set $ririko_car_offer to true>>\
<div class="pdoor-stage">
<img class="pdoor-bg" src="img/place/player_apartment/bed1.jpg" alt="">
<div class="pdoor-veil"></div>
<div class="pdoor-card">
<div class="pdoor-eyebrow">Your phone · Aunt Ririko · two missed buzzes</div>
<div class="pdoor-head">The phone got to you before the morning did.</div>
<div class="pdoor-prose">It buzzed twice before you were properly awake — and Aunt Ririko doesn’t double-text anyone she isn’t serious about. Her message sits above a photo of the silver Sorento parked in her driveway:<br><i>“The car sits in that driveway every weekend doing nothing, dear. Take it Saturday. Keys under the visor. Be on the road before noon. Take Remu somewhere green — anywhere that isn’t this city. — R.”</i></div>
<img class="akg-offer-photo" src="img/corpo_icon/kia_sorento_2.png" alt="The Sorento, parked and waiting">
<div class="pdoor-chips"><span class="pdoor-chip">Saturday · before noon · the keys wait at her house</span></div>
<div class="pdoor-btns">
<button type="button" class="pdoor-btn pdoor-btn--hero" data-pdoor-go="Morning Wake">Put the phone down — and remember Saturday</button>
</div>
</div>
</div>/* the commitment card at the car — one accidental click must never cost a weekend, so the drive starts
HERE, behind a hero button. Location-soft about where Remu came from (Ririko texted her first). */
<<hud>>\
<div class="pdoor-stage">
<img class="pdoor-bg" src="img/place/home_1/facade_day.jpg" alt="">
<div class="pdoor-veil"></div>
<div class="pdoor-card">
<div class="pdoor-eyebrow">Ririko’s driveway · Saturday morning</div>
<div class="pdoor-head">Keys under the visor. Wife already in shotgun.</div>
<div class="pdoor-prose">The Sorento is unlocked, the keys are exactly where the message said, and Remu is already in the passenger seat with an overnight bag on her knees and the smug look of a woman who has known about this longer than you have. <i>“Aunt Ririko texted me before she texted you, anata. I packed for both of us. Akigawa — there’s a river, and birds, and a tent with our name on it.”</i> She pats the driver’s seat, twice. <i>“Well? Drive.”</i></div>
<div class="pdoor-warn">One night in the valley — the road home opens Sunday. The store keeps Ririko’s hours till you’re back.</div>
<div class="pdoor-chips"><span class="pdoor-chip">Akigawa Valley · 50 minutes west</span></div>
<div class="pdoor-btns">
<button type="button" class="pdoor-btn pdoor-btn--hero" data-pdoor-go="Akigawa Drive">Turn the key — take her west</button>
<button type="button" class="pdoor-btn" data-pdoor-go="Ririko House">Not this week — back to the street</button>
</div>
</div>
</div>/* ★ THE DRIVE IS A SCENE (piece 2): the four phase_0 goingto clips + the chat engine. moveCost 10 =
every exchange spends 10 road minutes; leaveAfterMin 50 hides Arrive until 50 min are driven —
travel time SPENT ON HER, not skipped. leaveCost 0 (the road already charged itself). */
<<hud>>\
<<set $trip_akigawa to true>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_AKIGAWA_DRIVE_CONV, leaveTo : "Akigawa Facade" })>><</timed>>/* the PARKING-LOT HUB (piece 3): three doors — tent icon by the river path, ♨ on the lodge, the city
icon ON the parked car. Locked states stay visible + dim; every refusal speaks (script above). */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<<set _sun to (CL2.weekday($day) isnot 5)>>\
<<set _mid to (CL2.akigawa.midday())>>\
<div class="loc-prose loc-prose--above">Gravel, cold river air, and mountains stacked in autumn colours to every horizon. The lodge’s chimney is already working, and the Akigawa keeps up its noise somewhere below the lot.<<if _mid>> The morning’s gone soft and golden and past-noon — checkout came and went, and the only thing left in the lot with your name on it is the silver Sorento.<<else>> Remu gets out first and just stands there a second, breathing it in.<</if>></div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/akigawa/' + (_night ? 'akigawa_facade_n.jpg' : 'akigawa_facade.jpg')" alt="">
<span @class="'hotspot hotspot--icon' + (_mid ? ' hotspot--locked' : '')" style="left:14%;top:78%;width:7%"><<link '<img src="img/corpo_icon/camping_ground_icon.png" alt="The camping ground"><span class="hot-label">The camping ground</span>'>><<if _mid>><<run CL2.akigawa.checkoutBounce()>><<else>><<run CL2.advanceTime(10)>><<goto "Akigawa Campsite">><</if>><</link>></span>
<span @class="'hotspot hotspot--icon' + ((_mid or $min gte 1080 or $min lt 360) ? ' hotspot--locked' : '')" style="left:53%;top:42%;width:4.5%"><<link '<img src="img/corpo_icon/bath_house_icon.png" alt="The bath house"><span class="hot-label">The bath house</span>'>><<if _mid>><<run CL2.akigawa.checkoutBounce()>><<else>><<run CL2.akigawa.bath()>><</if>><</link>></span>
<span @class="'hotspot hotspot--icon' + (_sun ? '' : ' hotspot--locked')" style="left:92%;top:60%;width:5%"><<link '<img src="img/corpo_icon/ic_cbd.png" alt="Drive home"><span class="hot-label">Drive home</span>'>><<run CL2.akigawa.home()>><</link>></span>
</div>/* the remu_11/12 ground — for THIS build a walkable place + the tent; the scenes arrive with pieces 4+. */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<<set _mid to (CL2.akigawa.midday())>>\
<div class="loc-prose loc-prose--above">A flat green shelf above the river, close enough that you hear the water the whole time you are up here. The tent goes up crooked once, then right the second time, and Remu declares the crooked attempt “a practice tent” with great dignity.<<if _mid>> It’s past noon now, and the shelf is swept and packed up, nothing on it but flattened grass.<</if>></div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/akigawa/' + (_night ? 'akigawa_campsite_n.jpg' : 'akigawa_campsite.jpg')" alt="">
<span @class="'hotspot hotspot--icon' + (_mid ? ' hotspot--locked' : '')" style="left:33.5%;top:58%;width:4%"><<link '<img src="img/corpo_icon/nav_left.png" alt="The tent"><span class="hot-label">The tent</span>'>><<if _mid>><<run CL2.akigawa.checkoutBounce()>><<else>><<goto "Akigawa Tent">><</if>><</link>></span>
/* ★ REMU AT THE RIVER (author spec 2026-07-28): a FIGURE sprite (bottom-anchored, size = height%) —
she is far downstream, which is the whole premise of the shouting conversation. Daylight only; after
18:00 she is off the water, so the sprite goes visible-but-dim with an in-fiction refusal (§0.7).
HIDDEN once the onsen ask sent her ahead ($dayFlags.remu_onsen — she's at the lodge doors now). */
<<if not ($dayFlags and ($dayFlags.remu_onsen or $dayFlags.remu_camp_dinner_done))>>\
<span @class="'hotspot hotspot--figure' + ((_mid or $min gte 1080 or $min lt 360) ? ' hotspot--locked' : '')" style="left:80%;top:65%;height:23%"><<link '<img src="img/corpo_icon/remu_icon_9.png" alt="Remu, fishing"><span class="hot-label">Remu — out on the water</span>'>><<if _mid>><<run CL2.akigawa.checkoutBounce()>><<else>><<run CL2.akigawa.fish()>><</if>><</link>></span>\
<</if>>\
<span class="hotspot hotspot--icon" style="left:50%;top:90%;width:6%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back to the lot"><span class="hot-label">Back to the lot</span>'>><<run CL2.advanceTime(10)>><<goto "Akigawa Facade">><</link>></span>
</div>/* the tent for two — Saturday's sleep node (the overnight glue: without this, Sunday is unreachable).
The turn-in button keeps home's evening convention (19:00+); daytime it's a place, not a bed.
★ THE CAMP DINNER ARC (author spec 2026-07-29): the NAP button on the BLACK bag — waking at 18:00+
fires the remu_11 evening chain (cooking wake → campfire → dinner conv → after conv → the tent
tease). Afterwards ($dayFlags.remu_camp_dinner_done) Remu sits on the BLUE bag (remu_icon_11). */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<<set _mid to (CL2.akigawa.midday())>>\
<<set _dinnerDone to ($dayFlags and $dayFlags.remu_camp_dinner_done)>>\
<div class="loc-prose loc-prose--above">Two sleeping bags zipped into one wide one — Remu’s doing, performed without consultation. The lantern hangs from the ridge loop and the whole tent glows orange from the inside.<<if _dinnerDone>> And there she is on the blue half, cross-legged in the mint cardigan, fed and in no hurry to move.<</if>></div>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/akigawa/' + (_night ? 'akigawa_campsite_interior_n.jpg' : 'akigawa_campsite_interior.jpg')" alt="">
/* ★ the bag icon is TIME-AWARE (author 2026-07-29): night (19:00-06:00) = SLEEP -> the night sleep page;
daytime = NAP -> the 90-min nap (whose wake router fires the evening cooking chain at 18:00+); and past
Sunday noon it is GONE entirely — checkout has happened, nobody is lying down in this tent again. */
<<if not _mid>>\
<<if $min gte 1140 or $min lt 360>>\
<span class="hotspot hotspot--icon" style="left:72%;top:62%;width:6%"><<link '<img src="img/place/player_apartment/icon_sleep.png" alt="Sleep"><span class="hot-label">Turn in for the night</span>'>><<goto "Akigawa Tent Sleep">><</link>></span>\
<<else>>\
<span class="hotspot hotspot--icon" style="left:72%;top:62%;width:6%"><<link '<img src="img/place/player_apartment/icon_nap.png" alt="Nap"><span class="hot-label">Nap on your half</span>'>><<goto "Akigawa Tent Nap">><</link>></span>\
<</if>>\
<</if>>\
<<if _dinnerDone>>\
<span class="hotspot hotspot--figure" style="left:27%;top:76%;height:36%"><<link '<img src="img/corpo_icon/remu_icon_11.png" alt="Remu, hanging out"><span class="hot-label">Remu — on her half</span>'>><<goto "Akigawa Tent Sex">><</link>></span>\
<</if>>\
<span class="hotspot hotspot--icon" style="left:50%;top:90%;width:6%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Out of the tent"><span class="hot-label">Out of the tent</span>'>><<goto "Akigawa Campsite">><</link>></span>
</div>/* the away-from-home sleep beat — ★ author 2026-07-29: built on the SAME shape as the Tokyo sleep page
(:: Remu Sleep) — the .cv cv-sleep video stage playing mc_sleep_night_noloop with CL2.sleepRecap()
overlaid, and the .slp-cont wake button. Same funnel triad as every sleep (gameover / weekly report /
wake), even though a Sat→Sun crossing can trip neither: the funnel law admits no exceptions. */
<div id="cv-host"><div class="cv cv-sleep"><video class="cv-vid" autoplay muted playsinline src="vid/build_3_remu_11/mc_sleep_night_noloop.mp4"></video><div class="cv-veil"></div><div class="cv-overlay"><div class="slp-wrap"><<= CL2.sleepRecap()>></div></div></div></div>
<div class="slp-cont"><<button "Wake — morning in the valley">><<run CL2.sleep(420)>><<if $gameover_reason>><<goto "Game Over">><<elseif $pending_weekly_report>><<goto "Weekly Report">><<else>><<goto "Akigawa Morning">><</if>><</button>></div>/* Sunday wake in the tent — a beat, not a scene (nothing dictated here yet; pieces 4+ own the valley's
scene content). The card exits into the campsite with the whole Sunday ahead. */
<<hud>>\
<div class="pdoor-stage">
<img class="pdoor-bg" src="img/place/akigawa/akigawa_campsite_interior.jpg" alt="">
<div class="pdoor-veil"></div>
<div class="pdoor-card">
<div class="pdoor-eyebrow">Akigawa · <<= CL2.weekdayName($day)>> · 07:00</div>
<div class="pdoor-head">Birdsong, river, wife.</div>
<div class="pdoor-prose">You wake to green-filtered light and the smell of cold water, with Remu’s hair across your arm and half the valley already loud with birds. She surfaces slowly, blinks at the canvas, remembers where she is, and smiles about it before she says anything. <i>“…mm. Still here. Good,”</i> she says, and burrows back in for one more minute.</div>
<div class="pdoor-btns">
<button type="button" class="pdoor-btn pdoor-btn--hero" data-pdoor-go="Akigawa Campsite">Unzip the tent — the valley is yours</button>
</div>
</div>
</div>/* the remu_15 lodge — for THIS build the entrance is a place with its doors still warm (datsuijo /
hotspring interiors exist on disk and arrive with their scene pieces). Before-18:00 gate at the lot.
★ THE ONSEN ASK STAGING (2026-07-28): when $dayFlags.remu_onsen, Remu waits HERE (remu_icon_10 —
changed into her good clothes, waving); clicking her = her waiting line for now, the future chain's
entry point when the author dictates the bath scenes. Prose forks on her presence. */
<<hud>>\
<<set _night to ($min < 360 or $min >= 1080)>>\
<<set _her to ($dayFlags and $dayFlags.remu_onsen)>>\
<<if _her>>\
<div class="loc-prose loc-prose--above">Steam off the roofline, the ♨ curtain breathing in the doorway — and Remu at the foot of the steps in her good clothes, hair still cool from the river, waving the second she spots you like you might otherwise miss her. She has clearly been rehearsing the plan. You can see it on her.</div>\
<<else>>\
<div class="loc-prose loc-prose--above">Steam off the roofline, the ♨ curtain breathing in the doorway, and a shoe cubby half full of other people’s sensible sandals. Remu reads the price board twice, all the way down. <i>“Next time we’re here early enough to do this properly, anata. That’s a promise, not an estimate.”</i></div>\
<</if>>\
<div class="loc-scene loc-scene--big">
<img @src="'img/place/akigawa/' + (_night ? 'akigawa_bath_house_entrance_n.jpg' : 'akigawa_bath_house_entrance.jpg')" alt="">
<<if _her>>\
<span class="hotspot hotspot--figure" style="left:30%;top:80%;height:40%"><<link '<img src="img/corpo_icon/remu_icon_10.png" alt="Remu, waiting"><span class="hot-label">Remu — waiting for you</span>'>><<goto "Akigawa Bathhouse Chat">><</link>></span>\
<</if>>\
<span class="hotspot hotspot--icon" style="left:50%;top:90%;width:6%"><<link '<img src="img/corpo_icon/nav_down.png" alt="Back to the lot"><span class="hot-label">Back to the lot</span>'>><<goto "Akigawa Facade">><</link>></span>
</div>/* ★ THE RETURN CHAT-DRIVE (author spec 2026-07-29): going home is now a full costed-travel conversation
over the SAME goingto clips as the outbound drive (CL2_AKIGAWA_RETURN_CONV) — the reverse trip, tired-
happy. The conv charges ~50 min via moveCost; leaveTo lands the homecoming card. trip_akigawa stays TRUE
through the drive (the nav-lock holds) and clears at Akigawa Return Done. */
<<hud>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_AKIGAWA_RETURN_CONV, leaveTo : "Akigawa Return Done" })>><</timed>>/* the homecoming card — the drive's leaveTo. Clears the trip ONCE (dayFlag-guarded vs the refresh
double-charge trap), counts it, re-stamps the ward + uiReturn, and hands the keys back. NO extra
advanceTime here: the return conv already spent the road time via moveCost. */
<<hud>>\
<<if $dayFlags and not $dayFlags.akigawa_ret>>\
<<run (function () { var v = State.variables; v.dayFlags.akigawa_ret = true; v.trip_akigawa = false; v.akigawa_trips = (v.akigawa_trips || 0) + 1; v.cur_ward = 'nakano'; v.uiReturn = 'Ririko House'; })()>>\
/* ^ uiReturn re-stamp (review catch): this passage is nr:1, so the last stamped return target was Akigawa
Facade — a hub/phone opened FROM this card would otherwise close back INTO the valley after the trip
ended (presence + nav state already reset). The card stands on Ririko's driveway; hubs exit there. */\
<</if>>\
<div class="pdoor-stage">
<img class="pdoor-bg" src="img/place/home_1/facade_day.jpg" alt="">
<div class="pdoor-veil"></div>
<div class="pdoor-card">
<div class="pdoor-eyebrow">The road home · the keys go back</div>
<div class="pdoor-head">The city took her mid-sentence.</div>
<div class="pdoor-prose">Somewhere on the last stretch of highway she loses the thread of whatever she was saying and just—goes soft against the belt, river air still in her hair, one hand loose around your left wrist. You let her sleep the rest of it. You slide the Sorento onto Ririko’s driveway and the keys go back under the visor, warmer than you found them, and for a second neither of you is in any hurry to be home.</div>
<div class="pdoor-chips"><span class="pdoor-chip">Akigawa → Nakano · the long way back</span></div>
<div class="pdoor-btns">
<button type="button" class="pdoor-btn pdoor-btn--hero" data-pdoor-go="Ririko House">Pocket the memory — head home</button>
</div>
</div>
</div>/* ★ THE RIVER CHAIN, stage A (author spec 2026-07-28): she is far downstream and the water is loud —
the whole conversation is SHOUTED. The gold button calls her over (sexNoEnergyGate: shouting at your
wife is not sex; the conv engine's energy gate must not refuse it). Leave = let her keep fishing. */
<<hud>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_AKIGAWA_FISH_FAR, leaveTo : "Akigawa Campsite" })>><</timed>>/* stage B: she has walked down the gravel and squatted in front of the chair (phase_1_fishing_noloop_3
plays once, then HOLDS on her settled there — a single-clip conv never rerolls). Two gold buttons:
the kiss (sexGo, energy-exempt — a kiss is not sex) and the scene (sexMore, energy-gated, correct). */
<<hud>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_AKIGAWA_FISH_NEAR, leaveTo : "Akigawa Campsite" })>><</timed>>/* the kiss beat — CL2.scene (the locked standard for a non-conv, non-sex video scene). Two POV kiss
clips roll no-repeat; returns to her still crouched in front of you, so the chain can continue. */
<<hud>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.scene(Object.assign({}, window.CL2_AKIGAWA_KISS, { menu : CL2.akigawa.kissMenu() }))>><</timed>>/* remu_12 launcher (window.CL2_REMU_RIVER_SEX, build_3_remu_12, 27 clips) — the riverside oral scene.
STANDALONE passage => recapReturn is REQUIRED (without it the once/day recap exits to THIS passage
and soft-locks). leaveTo/recapReturn = the close conv, so she is still right there afterwards. */
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data : window.CL2_REMU_RIVER_SEX, leaveTo : "Akigawa Campsite", recapReturn : "Akigawa Fishing Close" })>><</timed>>/* ★ SCENE 14 stage A (author spec 2026-07-28): clicking her waiting sprite plays phase_0 (openVideo,
the walk-up one-shot) into the phase_1 chatting shuffle under a full conv — the bath speech finally
delivered. Gold buttons: inside to the cafe (not sex, energy-exempt) / the blowjob ask (sex, gated). */
<<hud>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_BATHHOUSE_ENTRANCE_CONV, leaveTo : "Akigawa Bath House Entrance" })>><</timed>>/* scene 14 launcher (window.CL2_REMU_BATHHOUSE_SEX, build_3_remu_14, 29 sexual clips) — the porch
blowjob. STANDALONE => recapReturn REQUIRED (the once/day recap exits to the chat, not to itself). */
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data : window.CL2_REMU_BATHHOUSE_SEX, leaveTo : "Akigawa Bath House Entrance", recapReturn : "Akigawa Bathhouse Chat" })>><</timed>>/* ★ SCENE 15 stage 0 (author spec 2026-07-28): inside the lodge — the cafe hangout loop + its own
conversation, plus THE COUNTER: three onsen-classic drinks as passage buttons (CL2.akigawa.drink —
energy restore, once each per day, real ¥). The doors onward to the baths arrive with the author's
next dictation; leave returns to the entrance. */
<<hud>>\
<div id="cv-host"></div>
<<nobr>><div class="akg-cafe-bar"><span class="akg-cafe-l">the counter</span>
<<button "コーヒー牛乳 Coffee Milk · ¥180">><<run CL2.akigawa.drink('coffee')>><</button>>
<<button "フルーツ牛乳 Fruit Milk · ¥180">><<run CL2.akigawa.drink('fruit')>><</button>>
<<button "ラムネ Ramune · ¥160">><<run CL2.akigawa.drink('ramune')>><</button>>
</div><</nobr>>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_BATHHOUSE_CAFE_CONV, leaveTo : "Akigawa Bath House Entrance" })>><</timed>>/* ★ SCENE 15 phase_0b (author spec 2026-07-29): the changing-room conv over the three preparing clips —
where the 貸切 KASHIKIRI private bath gets arranged and her porch itinerary (blue curtain / red curtain
/ a wall for an hour) is demolished in the best possible way. Gold button → the hot spring magnum. */
<<hud>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_ONSEN_PREPARING_CONV, leaveTo : "Akigawa Cafe" })>><</timed>>/* ★ SCENE 15 — THE ONSEN MAGNUM (window.CL2_REMU_ONSEN_SEX, build_3_remu_15). STAGE A = phases 1-5:
the private hot spring — in-water foreplay, then FOUR of her climaxes (cunni · underwater fingering ·
bent over the edge · the surface squirt), then her turn (bj / paizuri). Phases 6-11 (pool, pole,
private room) land in Stage B; until then p5_end holds the phase_7 clip as a provisional pause.
STANDALONE launcher => recapReturn REQUIRED. */
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
/* ⚠ opts.leaveTo OVERRIDES the data object's leaveTo — the launcher is the real source of truth, so the
end-of-outing router is named HERE (changing it in 9ZM alone does nothing). */
<<timed 40ms>><<run CL2.sex.start({ data : window.CL2_REMU_ONSEN_SEX, leaveTo : "Akigawa Onsen Done", recapReturn : "Akigawa Cafe" })>><</timed>>/* ★ the NAP (author spec 2026-07-29): the Apartment Nap economy, 90 min, halving per nap on the SHARED
$dayFlags.nap_count (so tent + flat naps diminish together) — but ★ THE VALLEY SLEEPS DOUBLE (author
2026-07-29): energy base 50, twice the flat's 25 (river air, no city, nobody about to need anything).
Stress stays at the standard −8 base — only the energy was doubled. The wake button routes through the
router below: waking at 18:00+ (with Remu at the campsite, dinner not yet had) = the remu_11 evening arc. */
<<hud>>\
<<set _n to ($dayFlags.nap_count || 0)>>\
<<set $dayFlags.nap_count to _n + 1>>\
<<set _de to Math.floor(50 * Math.pow(0.5, _n))>>\
<<set _ds to Math.floor(8 * Math.pow(0.5, _n))>>\
<<run CL2.advanceTime(90)>>\
<<set $energy to Math.min(100, $energy + _de)>>\
<<set $stress to Math.max(0, $stress - _ds)>>\
\* the flat's nap toasts its numbers; this one never did — with the valley paying double, the player has
to be able to SEE that it does (glue, flagged; same shape as Apartment Nap, valley wording). */
<<set _tsub to "Napped ~90 min">>\
<<if _de gt 0>><<set _tsub to _tsub + " · Energy +" + _de>><</if>>\
<<if _ds gt 0>><<set _tsub to _tsub + " · Stress −" + _ds>><</if>>\
<<if (_de + _ds) lte 0>><<set _tsub to _tsub + " · the valley has nothing left to give you today">><</if>>\
<<run CL2.toast((_n is 0) ? "The Valley Sleeps Double" : ((_de + _ds) gt 0 ? "Back Under the Canvas" : "Rested Out"), _tsub)>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.scene(Object.assign({}, window.CL2_CAMP_NAP, { menu: [{ label: 'Wake up', go: 'Akigawa Nap Wake' }] }))>><</timed>>/* the wake ROUTER: 18:00+ AND Remu at the campsite (not sent to the lodge) AND dinner not yet had ->
the cooking wake; otherwise just blink awake back in the tent. */
<<if ($min gte 1080 or $min lt 360) and not ($dayFlags and ($dayFlags.remu_onsen or $dayFlags.remu_camp_dinner_done))>>\
<<goto "Akigawa Cooking Wake">>\
<<else>>\
<<goto "Akigawa Tent">>\
<</if>>/* remu_11 phase_2 — waking to the smell of her cooking, her voice calling him out to eat. */
<<hud>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.scene(Object.assign({}, window.CL2_CAMP_WAKE, { menu: [{ label: 'Crawl out - follow the smell', go: 'Akigawa Campfire' }] }))>><</timed>>/* remu_11 phase_3 — the campsite at dusk, dinner nearly ready at the little stove (pre-bite per the
dossier flag; no open-flame prose — the heat source is unruled, lantern + burner only). */
<<hud>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.scene(Object.assign({}, window.CL2_CAMP_FIRE, { menu: [{ label: 'Sit down - take the bowl she hands you', go: 'Akigawa Camp Dinner' }] }))>><</timed>>/* ★ DINNER FEEDS YOU (author 2026-07-29): the one hot meal of the trip — her river fish, rice, and the
burner — pays +25 energy / −15 stress the moment the bowl lands. Free (she provisioned it in Tokyo),
which is why it is ONCE per day and gated behind the whole evening chain; compare the city food
economy in 30-locations (¥1,000 ramen = +18/−8). dayFlag-guarded so a refresh can't feed him twice. */
/* remu_11 phase_4 — CHATTING MODE WHILE EATING (the three dinner_bite clips shuffle under the conv;
she feeds him; her ONE fish gets its promised moment). Leave -> the after-dinner lull. */
<<hud>>\
<<if not ($dayFlags and $dayFlags.camp_dinner_fed)>>\
<<run (function () { var v = State.variables; v.dayFlags = v.dayFlags || {}; v.dayFlags.camp_dinner_fed = true; })()>>\
<<set _fe to Math.min(25, 100 - $energy)>><<set _fs to Math.min(15, $stress)>>\
<<set $energy to Math.min(100, $energy + 25)>>\
<<set $stress to Math.max(0, $stress - 15)>>\
<<set _dsub to "River fish, rice, the little burner">>\
<<if _fe gt 0>><<set _dsub to _dsub + " · Energy +" + _fe>><</if>>\
<<if _fs gt 0>><<set _dsub to _dsub + " · Stress −" + _fs>><</if>>\
<<run CL2.toast("She Fed You Properly", _dsub)>>\
<</if>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_CAMP_DINNER_CONV, leaveTo : "Akigawa Camp After" })>><</timed>>/* remu_11 phase_5 — CHATTING MODE AFTER EATING (the hangout loops; slower, closer, the last talk of
the evening). Leave -> the phase_6 tease that ends the scene. */
<<hud>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_CAMP_AFTER_CONV, leaveTo : "Akigawa Tent Tease" })>><</timed>>/* remu_11 phase_6 — SHE OFFERS THE TENT and the scene ends on the invitation (nothing inside is
depicted; the flag puts her on the blue bag from here on). dayFlag-guarded, refresh-safe. */
<<hud>>\
<<if not ($dayFlags and $dayFlags.remu_camp_dinner_done)>>\
<<run (function () { var v = State.variables; v.dayFlags = v.dayFlags || {}; v.dayFlags.remu_camp_dinner_done = true; })()>>\
<</if>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.scene(Object.assign({}, window.CL2_CAMP_TEASE, { menu: [{ label: 'Follow her in', go: 'Akigawa Tent' }] }))>><</timed>>/* ★ SCENE 13 — THE TENT (author spec 2026-07-29; window.CL2_REMU_TENT_SEX, build_3_remu_13, 54 clips).
Clicking Remu on the blue bag (after dinner) fires it. Opens on the phase_0 "start_hangingout" node —
the hangout that turns — then grope -> undress -> bj -> the 3-family position room. STANDALONE launcher
=> recapReturn REQUIRED. leaveTo = Akigawa Tent Sleep: finishing progresses straight to the night sleep
(author: "after the sex scene it progresses to the sleeping scene"). */
<div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data : window.CL2_REMU_TENT_SEX, leaveTo : "Akigawa Tent Sleep", recapReturn : "Akigawa Tent" })>><</timed>>/* ★ THE OUTING ENDS (author 2026-07-29): the onsen scene's leaveTo. Clears $dayFlags.remu_onsen — so
remu_icon_10 stops waiting at the lodge doors and the remu_icon_9 fishing sprite comes back at the
campsite (both sprites read that one flag). Latches $dayFlags.remu_onsen_done so the bath-house
chain can't be re-run from the porch today, and lands the MC outside the lodge with the walk back
to the river ahead of him. Reached ONLY from the score-card exit, i.e. a genuinely finished scene. */
<<run (function () {
var v = State.variables; v.dayFlags = v.dayFlags || {};
v.dayFlags.remu_onsen = false;
v.dayFlags.remu_onsen_done = true;
if (CL2.toast) CL2.toast('She went back down to the water', 'Pink, boneless and entirely pleased with herself — and still convinced that river owes her a second fish. “Ten minutes, anata. Fifteen. …don’t look at me like that, I’m FINE.”', { sound: false });
})()>>\
<<goto "Akigawa Bath House Entrance">>/* ★ THE ONSEN ASK beat (author piece 2026-07-28; REPOSITIONED same day — the ask lives on the CLOSE
conv now, proposed while she's squatting right in front of him): a few quiet lines, then she packs
the kit, grabs the bag, and marches for the lodge. The dayFlag-guarded block latches the relocation
+ charges 10 min ONCE (refresh-safe); the campsite sprite hides on the flag and remu_icon_10
appears at the entrance. Reached only from the NEAR conv's gold button (<18:00). */
<<hud>>\
/* ★ ONE OUTING PER DAY (2026-07-29): once the bath has been had ($dayFlags.remu_onsen_done, set by
Akigawa Onsen Done), the ask bounces in-fiction instead of marching her back up the path. The gold
button can't be condOK-gated — condOK reads top-level vars only, never a $dayFlags key — so the
refusal lives HERE, which also satisfies §0.7 (locked states stay visible and speak). */
<<if $dayFlags and $dayFlags.remu_onsen_done>>\
<<run CL2.toast('Already had, thoroughly', 'She looks at the lodge, then at you, and does not get up. “Anata. We <i>went</i>. I have nothing left to soak. …tomorrow. Ask me tomorrow and watch me sprint.”', { sound: false })>>\
<<goto "Akigawa Fishing Close">>\
<<else>>\
<<if not ($dayFlags and $dayFlags.remu_onsen)>>\
<<run (function () { var v = State.variables; v.dayFlags = v.dayFlags || {}; v.dayFlags.remu_onsen = true; CL2.advanceTime(10); })()>>\
<</if>>\
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.scene(window.CL2_AKIGAWA_ONSEN_PLAN)>><</timed>>
<</if>><div class="sv-wrap">
<div class="sv-head">
<div class="sv-title">Load Game</div>
<div class="sv-sub">Pick up where you left off.</div>
</div>
<<set _slots to Save.slots.length>>
<<if _slots gt 6>><<set _slots to 6>><</if>>
<<set _any to false>>
<div class="sv-grid">
<<for _i to 0; _i lt _slots; _i++>>
<<capture _i>>
<<if Save.slots.has(_i)>>
<<set _any to true>>
<<set _info to Save.slots.get(_i)>>
<div class="sv-card sv-card--full">
<div class="sv-slot">Slot <<= _i + 1>></div>
<div class="sv-meta"><<= (_info and _info.title) ? _info.title : "Saved game">></div>
<div class="sv-row">
<<button "Load">><<run Save.slots.load(_i)>><</button>>
</div>
</div>
<<else>>
<div class="sv-card sv-card--empty">
<div class="sv-slot">Slot <<= _i + 1>></div>
<div class="sv-meta sv-empty">— empty —</div>
</div>
<</if>>
<</capture>>
<</for>>
</div>
<<if not _any>>
<div class="sv-none">No saved games yet. Start a new game, then save from the menu inside.</div>
<</if>>
<div class="sv-back">
[[Back|Start]]
</div>
</div><<hud>>
<div class="sv-wrap">
<div class="sv-head">
<div class="sv-title">Save & Load</div>
<div class="sv-sub">Six slots. Save the moment, or return to one.</div>
</div>
<<set _slots to Save.slots.length>>
<<if _slots gt 6>><<set _slots to 6>><</if>>
<div class="sv-grid">
<<for _i to 0; _i lt _slots; _i++>>
<<capture _i>>
<<if Save.slots.has(_i)>>
<<set _info to Save.slots.get(_i)>>
<div class="sv-card sv-card--full">
<div class="sv-slot">Slot <<= _i + 1>></div>
<div class="sv-meta"><<= (_info and _info.title) ? _info.title : "Saved game">></div>
<div class="sv-row">
<<button "Save">>
<<run Save.slots.delete(_i)>>
<<run Save.slots.save(_i)>>
<<goto "Save Menu">>
<</button>>
<<button "Load">><<run Save.slots.load(_i)>><</button>>
<<button "Delete">>
<<run Save.slots.delete(_i)>>
<<goto "Save Menu">>
<</button>>
</div>
</div>
<<else>>
<div class="sv-card sv-card--empty">
<div class="sv-slot">Slot <<= _i + 1>></div>
<div class="sv-meta sv-empty">— empty —</div>
<div class="sv-row">
<<button "Save here">>
<<run Save.slots.save(_i)>>
<<goto "Save Menu">>
<</button>>
</div>
</div>
<</if>>
<</capture>>
<</for>>
</div>
<div class="sv-back">
<<button "← Back">><<goto $uiReturn>><</button>>
</div>
</div><<run CL2.character.enter()>>\
<<= CL2.character.html()>>\
<<timed 40ms>><<run CL2.character.mount()>><</timed>><<run CL2.character.set('tech')>>\
<<= CL2.character.html()>>\
<<timed 40ms>><<run CL2.character.mount()>><</timed>><<run CL2.character.set('journal')>>\
<<= CL2.character.html()>>\
<<timed 40ms>><<run CL2.character.mount()>><</timed>><<hud>>
<div class="cl2-page">
<h1 class="cl2-page-h">Guide</h1>
<div class="cl2-page-sub">What's worth doing next.</div>
<div class="cl2-guide"><<= CL2.guideHTML()>></div>
<div class="cl2-page-back"><<button "← Back">><<goto $uiReturn>><</button>></div>
</div><<= CL2.tokyoMapApp()>>/* remu_8 working scene — MC works the register (mc_work_3_counter LOOPS). Reached from the cashier chat conv's sexGo.
Applies the hands-on work cost (energy/stress/retail). Menu: clock off / ask overtime (once/day) / hug→remu_8 (gated). */
<<hud>>\
<<run CL2.advanceTime(15)>>\
<<set $energy to Math.max(0, ($energy || 0) - 6)>>\
<<set $stress to Math.min(100, ($stress || 0) + 4)>>\
<<set $skill_retail to Math.max(0, Math.min(100, ($skill_retail || 0) + 1))>>\
<<run CL2.toast("Worked the register", "Hands-on with Remu — retail +1, energy −6, stress +4.")>>\
<div id="cv-host"></div>
<<set _ckmenu to []>>\
<<if not $remu_ot_today and CL2.remuKonbiniTask()>><<set _ckmenu.push({ label : "Ask her to stay till close tonight", go : "Konbini Ask Overtime", cls : "cv-choice--go" })>><</if>>\
<<if $remu_aff gte 12 and $remu_mood gte 55 and $remu_depravity gte 40 and not $dayFlags.remu_cashier_sex>><<set _ckmenu.push({ label : "Let her wrap her arms around you…", go : "Konbini Cashier Sex", cls : "cv-choice--cum" })>><</if>>\
<<set _ckmenu.push({ label : "Clock off the register", go : "Konbini", cls : "cv-choice--ease" })>>\
<<run CL2.scene({ video : "vid/build_1_konbini_0/mc_work_3_counter.mp4", loop : true, poolId : "cashier_work", beats : window.CL2_REMU_CASHIER_WORK, menu : _ckmenu })>>/* The overtime ask (from cashier or shelf work). Once/day: extends Remu's konbini floor to 21:00 ($remu_ot_today),
at a mood + energy cost; resets to 09:00-15:00 next midnight (onMidnight). */
<<hud>>\
<<run CL2.advanceTime(5)>>\
<<if not $remu_ot_today>><<set $remu_ot_today to true>><<set $remu_mood to Math.max(0, ($remu_mood == null ? 70 : $remu_mood) - 15)>><<set $remu_energy to Math.max(0, ($remu_energy == null ? 100 : $remu_energy) - 30)>><<run CL2.toast("Remu agrees to stay late", "She'll work through to 9PM today — mood −15, energy −30. Back to her normal 9–3 tomorrow.")>><</if>>\
<div id="cv-host"></div>
<<run CL2.scene({ video : "vid/build_1_konbini_0/remu_work_discussion.mp4", loop : true, poolId : "remu_ot", beats : window.CL2_REMU_CASHIER_OT, menu : [ { label : "Back to the floor", go : "Konbini", cls : "cv-choice--go" } ] })>><div id="cv-host"><div class="cv"><video class="cv-vid" autoplay muted playsinline></video><div class="cv-veil"></div><div class="cv-overlay"><div class="cv-stream"></div><div class="cv-meta"></div></div></div><div class="cv-menu"></div></div>
<<timed 40ms>><<run CL2.sex.start({ data : window.CL2_REMU_CASHIER_SEX, leaveTo : "Konbini", recapReturn : "Konbini" })>><</timed>>/* remu_6 host: the afternoon steamy chat (CL2_REMU_AFTERNOON_CONV). Its "More than talking..." fires window.CL2_REMU_AFTERNOON_SEX. */
<<hud>>
<div id="cv-host"></div>
<<timed 40ms>><<run CL2.conv.start({ data : window.CL2_REMU_AFTERNOON_CONV, leaveTo : "Apartment Living Room" })>><</timed>><div id="vs-host"></div>
<<timed 40ms>><<run CL2.vsel.covers()>><</timed>><div id="vs-host"></div>
<<timed 40ms>><<run CL2.vsel.gallery()>><</timed>>